主要思路:activity實現OnTouchListener接口,繼承方法,GestureDetector.SimpleOnGestureListener的一個對象,用來識別各種手勢動作,源碼中SimpleOnGestureListener實現的是OnGestureListener, OnDoubleTapListener這兩個接口,如果你只是做檢測左右滑動可以去只實現OnGestureListener,然後覆蓋public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)方法。
public class fgMeterActivity extends Activity implements View.OnTouchListener{
private static final int FLING_MIN_DISTANCE = 50;
private static final int FLING_MIN_VELOCITY = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_meter);
ButterKnife.bind(this);
mGestureDetector = new GestureDetector(this, myGestureListener);
ScrollView scrollView = findViewById(R.id.sc);//佈局的主容器
scrollView.setOnTouchListener(this);
scrollView.setLongClickable(true);//必需設置這爲true 否則也監聽不到手勢
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return mGestureDetector.onTouchEvent(event);
}
GestureDetector.SimpleOnGestureListener myGestureListener = new GestureDetector.SimpleOnGestureListener(){
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
Log.e(TAG, "開始滑動");
float x = e1.getX()-e2.getX();
float x2 = e2.getX()-e1.getX();
if(x > FLING_MIN_DISTANCE && Math.abs(velocityX) > FLING_MIN_VELOCITY){
Log.i(TAG,"向左手勢");
}else if(x2 > FLING_MIN_DISTANCE && Math.abs(velocityX) > FLING_MIN_VELOCITY){
Log.i(TAG,"向右手勢");
}
return false;
};
};
}