編輯:關於Android編程
@Override public boolean dispatchTouchEvent(MotionEvent event) { // TODO Auto-generated method stub return super.dispatchTouchEvent(event); } @Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub return super.onTouchEvent(event); }而能做為容器的類如ViewGroup以及繼承它的類會有這幾個函數:
@Override public boolean onInterceptTouchEvent(MotionEvent ev) { // TODO Auto-generated method stub return super.onInterceptTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub return super.onTouchEvent(event); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { // TODO Auto-generated method stub return super.dispatchTouchEvent(ev); }現在我們就分別來重寫這幾個函數分別走一遍流程,讓我們更能清楚的看到android的touch事件是怎麼傳遞的。我們來重寫一下這兩類的方法。重寫一個TextView
public class MyTextView extends TextView{ private final String TAG = MyTextView.class.getSimpleName(); public MyTextView(Context context) { super(context); } @Override public boolean dispatchTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: Log.d(TAG, TAG + "dispatchTouchEvent+ACTION_DOWN"); break; case MotionEvent.ACTION_POINTER_DOWN: Log.d(TAG, TAG + "dispatchTouchEvent+ACTION_POINTER_DOWN"); break; case MotionEvent.ACTION_POINTER_UP: Log.d(TAG, TAG + "dispatchTouchEvent+ACTION_POINTER_UP"); break; case MotionEvent.ACTION_MOVE: Log.d(TAG, TAG + "dispatchTouchEvent+ACTION_MOVE"); break; case MotionEvent.ACTION_UP: Log.d(TAG, TAG + "dispatchTouchEvent+ACTION_UP"); break; } return super.dispatchTouchEvent(event); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: Log.d(TAG, TAG + "onTouchEvent+ACTION_DOWN"); break; case MotionEvent.ACTION_POINTER_DOWN: Log.d(TAG, TAG + "onTouchEvent+ACTION_POINTER_DOWN"); break; case MotionEvent.ACTION_POINTER_UP: Log.d(TAG, TAG + "onTouchEvent+ACTION_POINTER_UP"); break; case MotionEvent.ACTION_MOVE: Log.d(TAG, TAG + "onTouchEvent+ACTION_MOVE"); break; case MotionEvent.ACTION_UP: Log.d(TAG, TAG + "onTouchEvent+ACTION_UP"); break; } return super.onTouchEvent(event); } }然後我們再重寫一個LinearLayout
public class MyLinearLayout extends LinearLayout { private final String TAG = MyLinearLayout.class.getSimpleName(); public MyLinearLayout(Context context) { super(context); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: Log.d(TAG, TAG + "onInterceptTouchEvent+ACTION_DOWN"); break; case MotionEvent.ACTION_POINTER_DOWN: Log.d(TAG, TAG + "onInterceptTouchEvent+ACTION_POINTER_DOWN"); break; case MotionEvent.ACTION_POINTER_UP: Log.d(TAG, TAG + "onInterceptTouchEvent+ACTION_POINTER_UP"); break; case MotionEvent.ACTION_MOVE: Log.d(TAG, TAG + "onInterceptTouchEvent+ACTION_MOVE"); break; case MotionEvent.ACTION_UP: Log.d(TAG, TAG + "onInterceptTouchEvent+ACTION_UP"); break; } return super.onInterceptTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: Log.d(TAG, TAG + "onTouchEvent+ACTION_DOWN"); break; case MotionEvent.ACTION_POINTER_DOWN: Log.d(TAG, TAG + "onTouchEvent+ACTION_POINTER_DOWN"); break; case MotionEvent.ACTION_POINTER_UP: Log.d(TAG, TAG + "onTouchEvent+ACTION_POINTER_UP"); break; case MotionEvent.ACTION_MOVE: Log.d(TAG, TAG + "onTouchEvent+ACTION_MOVE"); break; case MotionEvent.ACTION_UP: Log.d(TAG, TAG + "onTouchEvent+ACTION_UP"); break; } return super.onTouchEvent(event); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: Log.d(TAG, TAG + "dispatchTouchEvent+ACTION_DOWN"); break; case MotionEvent.ACTION_POINTER_DOWN: Log.d(TAG, TAG + "dispatchTouchEvent+ACTION_POINTER_DOWN"); break; case MotionEvent.ACTION_POINTER_UP: Log.d(TAG, TAG + "dispatchTouchEvent+ACTION_POINTER_UP"); break; case MotionEvent.ACTION_MOVE: Log.d(TAG, TAG + "dispatchTouchEvent+ACTION_MOVE"); break; case MotionEvent.ACTION_UP: Log.d(TAG, TAG + "dispatchTouchEvent+ACTION_UP"); break; } return super.dispatchTouchEvent(ev); } }
public class TestActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MyLinearLayout layout = new MyLinearLayout(this); MyTextView myTextView = new MyTextView(this); myTextView.setText("touch event"); layout.addView(myTextView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); setContentView(layout); } }我們來看看log 然後我們在把TextView改成Button來看一下然後在看一下log 分析上面的log我們看到,touch事件首先走到的是父親的dispatchTouchEvent方法中,然後是onInterceptTouchEvent過後才是MyTextView的dispatchTouchEvent和TouchEent中。所以我們知道了一件事: 那就是所有的touch事件一定是先傳遞給父親然後在傳遞給孩子,然後在分析函數執行的順序最開始執行的是dispatchTouchEvent方法,後面執行onInterceptTouchEvent最後才走到onTouchEvent事件當中。同時我們也要注意這幾個函數的的返回值是boolean變量。然後我們再把MyLinearLayout的dispatchTouchEvent方法的返回值返回true,跑一下。
把github上的PagerSlidingTabStrip稍作修改: tab的文字顏色選中變色(原版文字不變色) 栗子:http://download.csdn.ne
RatingBar介紹 RatingBar作為評分組件,它在實現打分功能的時候確實很方便,並結合了手勢觸摸事件;RatingBar 的實質是 ProgressBar ,可
在PC上,如果我們誤刪了圖片或其他文件,都能通過回收站找回,從而避免重要信息的遺失。那麼,我們如何才能為Android手機也添加個回收站?此外,像微信、QQ
本文提到的所有數字模型制作,全部是用3D MAX建立模型,即使是不同的驅動引擎,對模型的要求基本是相同的。當一個VR模型制作完成時,它所包含的基本內容包括場景尺寸、單位,