/** * 手勢監聽 * * @author lifengfeng * */ public class MainActivity extends Activity implements OnTouchListener, OnGestureListener { // 建立一個用於識別收拾的GestureDetector對象 @SuppressWarnings("deprecation") private GestureDetector detector = new GestureDetector(this); // 新建一個LinearLayout佈局對象,這裏是指主頁面的佈局 private LinearLayout myLayout; // 限制最小移動像素 private int FLING_MIN_DISTANCE = 110; // 定義的Toast提示框顯示時間 private int TIME_OUT = 1000; private static final String TAG = "Main"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myLayout = (LinearLayout) findViewById(R.id.test_layout); // 爲佈局綁定監聽 myLayout.setOnTouchListener(this); } /** * 手勢滑動時別調用 */ @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { // X軸的座標位移大於FLING_MIN_DISTANCE,且移動速度大於FLING_MIN_VELOCITY個像素/秒 if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE) { // 向左滑動 Toast.makeText(this, "向左滑動", TIME_OUT).show(); } else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE) { // 向右滑動 Toast.makeText(this, "向右滑動", TIME_OUT).show(); } return false; } /** * 長按時被調用 */ @Override public void onLongPress(MotionEvent e) { Log.d(TAG, "觸發長按回調"); } /** * 滾動時調用 */ @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { return false; } /** * 在按下動做時被調用 */ @Override public boolean onDown(MotionEvent e) { Log.d(TAG, "按下回調"); return false; } /** * 按住時被調用 */ @Override public void onShowPress(MotionEvent e) { Log.d(TAG, "按住不鬆回調"); } /** * 擡起時被調用 */ @Override public boolean onSingleTapUp(MotionEvent e) { Log.d(TAG, "觸發擡起回調"); return false; } /** * 重寫OnTouchListener的onTouch方法 此方法在觸摸屏被觸摸,即發生觸摸事件(接觸和撫摸兩個事件)的時候被調用 */ @Override public boolean onTouch(View v, MotionEvent event) { detector.onTouchEvent(event); return true; } }
版權聲明:本文爲博主原創文章,未經博主容許不得轉載。java