標籤:cal each keyword 滾動 一段 div count this 移動
OnTouchListener使用
public class ViewActivity extends Activity implements View.OnTouchListener { @Override protected void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.view_gestrue); LinearLayout ll_context = (LinearLayout) findViewById(R.id.ll_context); ll_context.setOnTouchListener(this); } @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getActionMasked()) { case MotionEvent.ACTION_DOWN: Log.v("-->", "手指碰到螢幕"); break; case MotionEvent.ACTION_MOVE: Log.v("-->", "手指在移動"); break; case MotionEvent.ACTION_OUTSIDE: Log.v("-->", "手指離開view的邊界"); break; case MotionEvent.ACTION_UP: Log.v("-->", "手指離開螢幕"); break; case MotionEvent.ACTION_SCROLL: Log.v("-->", "手指在滑動"); break; case MotionEvent.ACTION_POINTER_DOWN: Log.v("-->", "非主手指碰到螢幕"); break; case MotionEvent.ACTION_POINTER_UP: Log.v("-->", "非主手指離開螢幕"); break; } return true;//攔截事件 }}
Tip:MotionEvent經常用法
event.getY();//觸碰點擷取距離v頂部的距離event.getRawY();//觸碰點擷取距離螢幕頂部的距離event.getPointerCount();//擷取觸碰手指的個數
GestureDetector使用:
//GestureDetector這個類對外提供了兩個介面:OnGestureListener,OnDoubleTapListener,另一個內部類SimpleOnGestureListener。
GestureDetector.OnGestureListener介面:用來通知普通的手勢事件,該介面有例如以下六個回呼函數:
1.onDown(MotionEvent e):down事件;
2.onSingleTapUp(MotionEvent e):一次點擊up事件;在touch down後又沒有滑動
(onScroll),又沒有長按(onLongPress),然後Touchup時觸發。
點擊一下很快的(不滑動)Touchup:
onDown->onSingleTapUp->onSingleTapConfirmed
點擊一下略微慢點的(不滑動)Touchup:
onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed
3.onShowPress(MotionEvent e):down事件發生而move或則up還沒發生前觸發該事件。Touch了還沒有滑動時觸發(與onDown。onLongPress)比較onDown僅僅要Touch down一定立馬觸發。
而Touchdown後過一會沒有滑動先觸發onShowPress再是onLongPress。
所以Touchdown後一直不滑動
依照onDown->onShowPress->onLongPress這個順序觸發。
4.onLongPress(MotionEvent e):長按事件。Touch了不移動一直Touch down時觸發
5.onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY):滑動手勢事件。Touch了滑動一點距離後,在ACTION_UP時才會觸發參數:e1 第1個ACTION_DOWN MotionEvent 而且僅僅有一個;e2 最後一個ACTION_MOVE MotionEvent ;velocityX X軸上的移動速度,像素/秒 。velocityY Y軸上的移動速度,像素/秒.觸發條件:X軸的座標位移大於FLING_MIN_DISTANCE,且移動速度大於FLING_MIN_VELOCITY個像素/秒
6.onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY):在螢幕上拖動事件。
不管是用手拖動view,或者是以拋的動作滾動,都會多次觸發,這種方法在ACTION_MOVE動作發生時就會觸發
拋:手指觸動螢幕後,略微滑動後馬上鬆開
GestureDetector.OnDoubleTapListener介面:用來通知DoubleTap事件,相似於滑鼠的雙擊事件。
1.onDoubleTap(MotionEvent e):在雙擊的第二下。Touch down時觸發 。
2.onDoubleTapEvent(MotionEvent e):通知DoubleTap手勢中的事件。包括down、up和move事件(這裡指的是在雙擊之間發生的事件,比如在同一個地方雙擊會產生DoubleTap手勢,而在DoubleTap手勢裡面還會發生down和up事件,這兩個事件由該函數通知)。雙擊的第二下Touch down和up都會觸發,可用e.getAction()區分。
3.onSingleTapConfirmed(MotionEvent e):用來判定該次點擊是SingleTap而不是DoubleTap,假設連續點擊兩次就是DoubleTap手勢。假設僅僅點擊一次。系統等待一段時間後沒有收到第二次點擊則判定該次點擊為SingleTap而不是DoubleTap,然後觸發SingleTapConfirmed事件。
這種方法不同於onSingleTapUp,他是在GestureDetector確信使用者在第一次觸控螢幕幕後,沒有緊跟著第二次觸控螢幕幕。也就是不是“雙擊”的時候觸發
tip:
//distanceX。是前後兩次call的X距離,不是e2與e1的水平距離; 是前後兩次call的Y距離,不是e2與e1的垂直距離
用法:
1:繼承GestureDetector.OnGestureListener
2:執行個體化檢測器GestureDetector mDetector = new GestureDetector(ViewActivity.this, this);
3:在ontouch裡面回調方法
@Overridepublic boolean onTouch(View v, MotionEvent event) { mDetector.onTouchEvent(event); return true;}
參考連結:
使用者手勢檢測-GestureDetector使用具體解釋
android觸控,先瞭解MotionEvent
Android觸碰事件