編輯:關於Android編程
public boolean dispatchTouchEvent(MotionEvent event) //事件分發 public boolean onTouchEvent(MotionEvent event) //事件處理
public boolean dispatchTouchEvent(MotionEvent event) //事件分發 public boolean onTouchEvent(MotionEvent event) //事件處理 public boolean onInterceptTouchEvent(MotionEvent event) //事件攔截3,事件響應:
按下(ACTION_DOWN) 移動(ACTION_MOVE) 抬起(ACTION_UP) 取消(ACTION_CANCEL)當在“移動事件”中喚醒“取消事件”,就會存在沒有“抬起事件”。【特例】
OnClickListener //點擊事件 OnLongClickListener //長按事件 OnTouchListener //觸摸監聽器
二、案例分析
1,EDButton
View類的子類,實現View類的事件分發機制模擬。/** * 功能描述:Button繼承類,重寫事件分發與事件處理【理清事件分發機制】 * 時間:2016/8/5 * 作者:vision */ public class EDButton extends Button { private static final String TAG = "EDButton"; public EDButton(Context context) { super(context); } public EDButton(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean dispatchTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: System.out.print("EBButton -- dispatchTouchEvent -- ACTION_DOWN"); Log.i(TAG, "EBButton -- dispatchTouchEvent -- ACTION_DOWN"); break; case MotionEvent.ACTION_UP: System.out.print("EBButton -- dispatchTouchEvent -- ACTION_UP"); Log.i(TAG, "EBButton -- dispatchTouchEvent -- ACTION_UP"); break; case MotionEvent.ACTION_MOVE: System.out.print("EBButton -- dispatchTouchEvent -- ACTION_MOVE"); Log.i(TAG, "EBButton -- dispatchTouchEvent -- ACTION_MOVE"); break; } return super.dispatchTouchEvent(event); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: System.out.print("EBButton -- onTouchEvent -- ACTION_DOWN"); Log.i(TAG, "EBButton -- onTouchEvent -- ACTION_DOWN"); break; case MotionEvent.ACTION_UP: System.out.print("EBButton -- onTouchEvent -- ACTION_UP"); Log.i(TAG, "EBButton -- onTouchEvent -- ACTION_UP"); break; case MotionEvent.ACTION_MOVE: System.out.print("EBButton -- onTouchEvent -- ACTION_MOVE"); Log.i(TAG, "EBButton -- onTouchEvent -- ACTION_MOVE"); break; } return super.onTouchEvent(event); } }2,EDViewGroup
/** * 功能描述:測試ViewGroup的事件分發 * 時間:2016/8/8 * 作者:vision */ public class EDViewGroup extends LinearLayout { private static final String TAG = "EDViewGroup"; public EDViewGroup(Context context) { super(context); } public EDViewGroup(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: System.out.print("EDViewGroup -- dispatchTouchEvent -- ACTION_DOWN"); Log.i(TAG, "EDViewGroup -- dispatchTouchEvent -- ACTION_DOWN"); break; case MotionEvent.ACTION_UP: System.out.print("EDViewGroup -- dispatchTouchEvent -- ACTION_UP"); Log.i(TAG, "EDViewGroup -- dispatchTouchEvent -- ACTION_UP"); break; case MotionEvent.ACTION_MOVE: System.out.print("EDViewGroup -- dispatchTouchEvent -- ACTION_MOVE"); Log.i(TAG, "EDViewGroup -- dispatchTouchEvent -- ACTION_MOVE"); break; } return super.dispatchTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: System.out.print("EDViewGroup -- onTouchEvent -- ACTION_DOWN"); Log.i(TAG, "EDViewGroup -- onTouchEvent -- ACTION_DOWN"); break; case MotionEvent.ACTION_UP: System.out.print("EDViewGroup -- onTouchEvent -- ACTION_UP"); Log.i(TAG, "EDViewGroup -- onTouchEvent -- ACTION_UP"); break; case MotionEvent.ACTION_MOVE: System.out.print("EDViewGroup -- onTouchEvent -- ACTION_MOVE"); Log.i(TAG, "EDViewGroup -- onTouchEvent -- ACTION_MOVE"); break; } return super.onTouchEvent(event); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: System.out.print("EDViewGroup -- onInterceptTouchEvent -- ACTION_DOWN"); Log.i(TAG, "EDViewGroup -- onInterceptTouchEvent -- ACTION_DOWN"); break; case MotionEvent.ACTION_UP: System.out.print("EDViewGroup -- onInterceptTouchEvent -- ACTION_UP"); Log.i(TAG, "EDViewGroup -- onInterceptTouchEvent -- ACTION_UP"); break; case MotionEvent.ACTION_MOVE: System.out.print("EDViewGroup -- onInterceptTouchEvent -- ACTION_MOVE"); Log.i(TAG, "EDViewGroup -- onInterceptTouchEvent -- ACTION_MOVE"); break; } // return super.onInterceptTouchEvent(ev); return true; } }單獨事件分發測試界面展示:
Android中事件傳遞按照從上到下進行層級傳遞,事件處理從Activity開始到ViewGroup再到View。
View事件傳遞方法包括dispatchTouchEvent、onTouchEvent,表示事件分發,事件處理;
ViewGroup事件傳遞方法包括dispatchTouchEvent、onTouchEvent、onInterceptTouchEvent,
表示事件分發,事件處理,事件攔截。
onTouch事件要先於onClick事件執行,onTouch在事件分發方法dispatchTouchEvent中調用,
而 onClick在事件處理方法onTouchEvent中被調用,onTouchEvent要後於dispatchTouchEvent方法的調用。
事件處理分發,實例實現相對較容易,主要在於邏輯的理解與實現。後續需要從源碼的角度深層次理解相互調用關系。
這兩天學習了使用Path繪制貝塞爾曲線相關,然後自己動手做了一個類似QQ未讀消息可拖拽的小氣泡,效果圖如下:接下來一步一步的實現整個過程。基本原理其實就是使用Path繪制
熟練掌握開發工具的使用,可以提高我們的開發效率,減少很多工作量!首先介紹一些常用設置:一、代碼默認字體12,偏小,一般設置14: 二、窗口白色比較刺眼,系統有個
DRM In this document Overview Android DRM FrameworkWidevine DR
其實這個安卓計算機,所有的後台思想與《C#計算器編寫代碼》是一模一樣的。Win窗體程序移植到安卓,從C#到Java其實很簡單的,因為兩者的基本語法都很相像,唯一的難點是安