繁体   English   中英

移动系统覆盖元素

[英]Move a system overlay element

我已经从此处的示例创建了系统叠加层。

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

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

我希望我可以使用它来移动我的叠加层。 我找到了移动覆盖层的解决方案(当我移动视图时,它的确跟随手指的移动)。 解决方案在这里

此解决方案使用onTouch方法,该方法提供ViewMotionEvent参数。 但就我而言,我没有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 只需用this替换其他答案中出现的任何view

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM