我已经从示例 here 创建了系统覆盖层.
在SampleOverlayView.java
中有一个用于移动事件的方法,如下所示:
@Override
protected void onTouchEvent_Move(MotionEvent event) {
info.setText("MOVE\nPOINTERS: " + event.getPointerCount());
}
我希望我可以用它来移动我的叠加层。我找到了移动叠加层的解决方案(当我移动 View 时,它确实跟随我的手指移动)。解决完毕here
此解决方案使用 onTouch
方法,该方法提供 View
和 MotionEvent
参数。但就我而言,我没有 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/