在Android的开发中要对一个View长按、滑动、和点击同时进行,在View的onTouch事件中做了以下的工作:
- float xDown,yDown,xUp;
- boolean isLongClickModule = false;
- boolean isLongClicking = false;
- myView.setOnTouchListener(new OnTouchListener() {
- public boolean onTouch(View v, MotionEvent event) {
-
- if (event.getAction() == MotionEvent.ACTION_DOWN) {
- xDown= event.getX();
- yDown = event.getY();
- Log.v("OnTouchListener", "Down");
-
- } else if (event.getAction() == MotionEvent.ACTION_UP) {
-
- if(isLongClickModule){
- isLongClickModule = false;
- isLongClicking = false;
- }
- xUp = event.getX();
-
- Log.v("OnTouchListener", "Up");
-
- if ((xUp - xDown) > 20)
- {
-
- }
- else if((xUp - xDown ) < -20)
- {
-
- }
- else if( 0 == (xDown - xUp))
- {
- int viewWidth = v.getWidth();
- if( xDown < viewWidth/3 )
- {
-
- }
- else if(xDown > viewWidth/3 && xDown < viewWidth * 2 /3)
- {
-
- }
- else
- {
-
- }
- }
- }
- else if (event.getAction() == MotionEvent.ACTION_MOVE)
- {
-
- if(!isLongClickModule)
- {
- isLongClickModule = isLongPressed(xDown, yDown, event.getX(),
- event.getY(),event.getDownTime() ,event.getEventTime(),300);
- }
- if(isLongClickModule && !isLongClicking){
-
- isLongClicking = true; }
- }
- else
- {
-
- } return false;
- }});
-
-
-
-
-
-
-
-
-
- private boolean isLongPressed(float lastX,float lastY,
- float thisX,float thisY,
- long lastDownTime,long thisEventTime,
- long longPressTime){
- float offsetX = Math.abs(thisX - lastX);
- float offsetY = Math.abs(thisY - lastY);
- long intervalTime = thisEventTime - lastDownTime;
- if(offsetX <= 10 && offsetY <= 10 && intervalTime >= longPressTime){
- return true;
- }
- return false;
- }