? ? ? ?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坐標記錄。
? ? ? ?以上就是百恒網絡為大家介紹的關于觸摸事件的處理方法,希望能夠幫到大家!