public void setOnTouchListener(View.OnTouchListener l)
该方法的工作方式与setOnClickListener(View.OnClickListener)相同。我们实现View.OnTouchListener接口,供触摸事件发生时调用。
不过,我们的定制视图是View的子类,因此可走捷径直接覆盖以下View方法:
public boolean onTouchEvent(MotionEvent event)
该方法接收一个MotionEvent类实例,MotionEvent类可用来描述包括位置和动作的触摸事件。动作用于描述事件所处的阶段。
在onTouchEvent(...)实现方法中,可使用以下MotionEvent方法查看动作值:
public final int getAction()
在BoxDrawingView.java中,添加一个日志tag,然后实现onTouchEvent(...)方法记录可能发生的四个不同动作,如下代码所示。
实现BoxDrawingView视图类(BoxDrawingView.java)
public class BoxDrawingView extends View {
private static final String TAG = "BoxDrawingView";
...
@Override
public boolean onTouchEvent(MotionEvent event) {
PointF current = new PointF(event.getX(), event.getY());
String action = "";
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
action = "ACTION_DOWN";
break;
case MotionEvent.ACTION_MOVE:
action = "ACTION_MOVE";
break;
case MotionEvent.ACTION_UP:
action = "ACTION_UP";
break;
case MotionEvent.ACTION_CANCEL:
action = "ACTION_CANCEL";
break;
}
Log.i(TAG, action + " at x=" + current.x +
", y=" + current.y);
return true;
}
}
注意,X和Y坐标已经封装到PointF对象中。稍后,我们需要同时传递这两个坐标值。而Android提供的PointF容器类刚好满足了这一需求。
运行DragAndDraw应用并打开LogCat视图窗口。触摸屏幕并移动手指,查看BoxDrawingView接收的触摸动作的X和Y坐标记录。
以上就是百恒网络为大家介绍的关于触摸事件的处理方法,希望能够帮到大家!