java - 移动系统覆盖元素

标签 java android

我已经从示例 here 创建了系统覆盖层.

SampleOverlayView.java中有一个用于移动事件的方法,如下所示:

@Override
protected void onTouchEvent_Move(MotionEvent event) {
    info.setText("MOVE\nPOINTERS: " + event.getPointerCount());
}

我希望我可以用它来移动我的叠加层。我找到了移动叠加层的解决方案(当我移动 View 时,它确实跟随我的手指移动)。解决完毕here

此解决方案使用 onTouch 方法,该方法提供 ViewMotionEvent 参数。但就我而言,我没有 view 对象。 View 可以是任何东西(作为覆盖层)。只有 event 参数。

知道如何在屏幕内移动叠加层吗?

提前致谢

最佳答案

当然,您已经有一个View了。我复制了您链接到的指南的相关部分:

public class SampleOverlayView extends OverlayView {

    private TextView info;

    private float x;
    private float y;

    public SampleOverlayView(OverlayService service) {
        super(service, R.layout.overlay, 1);
    }

    public int getGravity() {
        return Gravity.TOP + Gravity.RIGHT;
    }

    @Override
    protected void onInflateView() {
        info = (TextView) this.findViewById(R.id.textview_info);
    }

    @Override
    protected void refreshViews() {
        info.setText("WAITING\nWAITING");
    }

    @Override
    protected void onTouchEvent_Up(MotionEvent event) {w
        info.setText("UP\nPOINTERS: " + event.getPointerCount());
    }

    @Override
    protected void onTouchEvent_Move(MotionEvent event) {
        float newX = event.getX();
        float newY = event.getY();

        float deltaX = newX - this.x;
        float deltaY = newY - this.y;

        // Move this View

        this.x = newX;
        this.y = newY;
    }

    @Override
    protected void onTouchEvent_Press(MotionEvent event) {
        this.x = event.getX();
        this.y = event.getY();
    }

    @Override
    public boolean onTouchEvent_LongPress() {
        info.setText("LONG\nPRESS");
        return true;
    }
}

因此,您不需要单独的 View 对象,因为该类 View。只需将另一个答案中出现的任何 view 替换为 this 即可。

关于java - 移动系统覆盖元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25021642/

相关文章:

java - 在同一方法上动态传递不同类型的对象

java - 正则表达式标签消除

java - Windows 7 防火墙 : Modify group items from command line

java - 应用程序在 android 11 上崩溃 : java. lang.ExceptionInInitializerError

更改目标 sdk 时 Android 项目不运行

java - 如何在 RecyclerView 中修改 Layout 宽度

java - com.google.common.io.ByteArrayDataInput 的替代方案?

java - 如何在 android studio 中的复选框的 switch case 语句中使用 OR

android - Google Places Api Key 未经授权

java - LG G4在基于Lunar Lander的Android游戏启动时崩溃