Gesture在 ViewGroup中使用
GestureDetector類可以讓我們快速的處理手勢事件,如點擊,滑動等。
使用GestureDetector分三步:
1. 定義GestureDetector類
2. 初始化手勢類,同時設置手勢監聽
3. 將touch事件交給gesture處理
先來了解一下如何使用,后面會有示例:
package com.example.y2222.myview;import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.view.GestureDetector;import android.view.MotionEvent;import android.widget.LinearLayout;/** * Created by raise.yang on 2016/06/29. */public class GestureDemoView extends LinearLayout { //1,定義GestureDetector類 private GestureDetector m_gestureDetector; public GestureDemoView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public GestureDemoView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); //設置為可點擊 setClickable(true); //2,初始化手勢類,同時設置手勢監聽 m_gestureDetector = new GestureDetector(context, onGestureListener); //雙擊監聽-一般很少用到 m_gestureDetector.setOnDoubleTapListener(onDoubleTapListener); } @Override public boolean onTouchEvent(MotionEvent event) { //3,將touch事件交給gesture處理 m_gestureDetector.onTouchEvent(event); return super.onTouchEvent(event); } //初始化手勢監聽對象,使用GestureDetector.OnGestureListener的實現抽象類,因為實際開發中好多方法用不上 private final GestureDetector.OnGestureListener onGestureListener = new GestureDetector.SimpleOnGestureListener() { @Override public boolean onSingleTapUp(MotionEvent e) { Log.d("GestureDemoView", "onSingleTapUp() "); return super.onSingleTapUp(e); } @Override public void onLongPress(MotionEvent e) { Log.d("GestureDemoView", "onLongPress() "); super.onLongPress(e); } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { Log.d("GestureDemoView", "onScroll() distanceX = " + distanceX); return super.onScroll(e1, e2, distanceX, distanceY); } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { Log.d("GestureDemoView", "onFling() velocityX = " + velocityX); return super.onFling(e1, e2, velocityX, velocityY); } @Override public void onShowPress(MotionEvent e) { Log.d("GestureDemoView", "onShowPress() "); super.onShowPress(e); } @Override public boolean onDown(MotionEvent e) { Log.d("GestureDemoView", "onDown() "); return super.onDown(e); } @Override public boolean onDoubleTap(MotionEvent e) { Log.d("GestureDemoView", "onDoubleTap() "); return super.onDoubleTap(e); } @Override public boolean onDoubleTapEvent(MotionEvent e) { Log.d("GestureDemoView", "onDoubleTapEvent() "); return super.onDoubleTapEvent(e); } @Override public boolean onSingleTapConfirmed(MotionEvent e) { Log.d("GestureDemoView", "onSingleTapConfirmed() "); return super.onSingleTapConfirmed(e); } @Override public boolean onContextClick(MotionEvent e) { Log.d("GestureDemoView", "onContextClick() "); return super.onContextClick(e); } }; private final GestureDetector.OnDoubleTapListener onDoubleTapListener = new GestureDetector.OnDoubleTapListener() { @Override public boolean onSingleTapConfirmed(MotionEvent e) { Log.d("GestureDemoView", "onSingleTapConfirmed() OnDoubleTapListener"); return false; } @Override public boolean onDoubleTap(MotionEvent e) { Log.d("GestureDemoView", "onDoubleTap() OnDoubleTapListener"); return false; } @Override public boolean onDoubleTapEvent(MotionEvent e) { Log.d("GestureDemoView", "onDoubleTapEvent() OnDoubleTapListener"); return false; } };}注意:setClickable(true);一定要加,不然只會收到下例3個事件,被這個整了好長時間才找到原因.(⊙ 主站蜘蛛池模板: 松溪县| 深泽县| 遂平县| 泰顺县| 沙田区| 肥西县| 汾西县| 泊头市| 于都县| 临沂市| 五原县| 通榆县| 伽师县| 博爱县| 土默特右旗| 大悟县| 铜山县| 怀来县| 徐州市| 建阳市| 通榆县| 奉新县| 修文县| 襄城县| 城口县| 云霄县| 永和县| 花垣县| 泰和县| 陆丰市| 阜南县| 海晏县| 德兴市| 麦盖提县| 岳阳市| 壶关县| 沧源| 临沧市| 皋兰县| 赤壁市| 阜城县|