Android螢幕長按事件(自定義時間長短)
阿新 • • 發佈:2019-01-30
int mLastMotionX, mLastMotionY; boolean isLongPress; boolean isMoved; Runnable mLongPressRunnable; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_main); mLongPressRunnable = new Runnable() { @Override public void run() { handler.sendMessage(handler.obtainMessage(Util.LONG_PRESS)); } }; } private Handler handler = new Handler(new Callback() { @Override public boolean handleMessage(Message msg) { // TODO Auto-generated method stub switch (msg.what) { case Util.LONG_PRESS: // new AlertDialog.Builder(MainActivity.this) // .setMessage("this is " + in1[currentViewTagPosition]) // .setPositiveButton("OK", null).show(); new AlertDialog.Builder(MainActivity.this).setMessage("Test") .setPositiveButton("OK", null).show(); break; default: break; } return false; } }); @Override public boolean dispatchTouchEvent(MotionEvent event) { // TODO Auto-generated method stub int x = (int) event.getX(0); int y = (int) event.getY(0); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: isLongPress = false; isMoved = false; mLastMotionX = x; mLastMotionY = y; handler.postDelayed(mLongPressRunnable, 1000); break; case MotionEvent.ACTION_MOVE: if (isMoved) break; if (Math.abs(mLastMotionX - x) > Util.TOUCH_RANGE || Math.abs(mLastMotionY - y) > Util.TOUCH_RANGE) { isMoved = true; handler.removeCallbacks(mLongPressRunnable); } break; case MotionEvent.ACTION_UP: handler.removeCallbacks(mLongPressRunnable); break; default: break; } return super.dispatchTouchEvent(event); }