Hi~如题:onTouchEvent 有么有(单击,双击,三击)事件?
在TextView屏幕按触摸中需要触发三种情况。是否有法子可实现?

解决方案 »

  1.   

    你可以在网上看看相关资料:
         onTouchEvent中要处理的最常用的3个事件就是:ACTION_DOWN、ACTION_MOVE、ACTION_UP。     这三个事件标识出了最基本的用户触摸屏幕的操作,含义也很清楚。虽然大家天天都在用它们,但是有一点请留意,ACTION_DOWN事件作为起始事件,它的重要性是要超过ACTION_MOVE和ACTION_UP的,如果发生了ACTION_MOVE或者ACTION_UP,那么一定曾经发生了ACTION_DOWN。     从Android的源代码中能看到基于这种不同重要性的理解而实现的一些交互机制,SDK中也有明确的提及,例如在ViewGroup的onInterceptTouchEvent方法中,如果在ACTION_DOWN事件中返回了true,那么后续的事件将直接发给onTouchEvent,而不是继续发给onInterceptTouchEvent。
    onTouchEvent是最先捕捉到ACTION_DOWN和ACTION_UP事件的,其次才可能触发onClick或者onLongClick。主要的逻辑在View.java中的onTouchEvent方法中实现的 
        
      

  2.   

    没有一般是实现ontouch。根据ondown onmove oncancel onup来判断执行各类操作
      

  3.   


    判断的时间用哪个? 
    downtime or eventtime 还是用其它的哪个?
    没找到好法子。
      

  4.   

      int up = 0;
      int down = 0;
      int move = 0;  @Override
      public boolean onTouchEvent(MotionEvent event) {    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
          down++;
          break;
        case MotionEvent.ACTION_MOVE:
          move++;
          break;
        case MotionEvent.ACTION_UP:
          up++;
          break;    default:
          break;    }    System.out.println("DOWN:" + down + " MOVE:" + move + " UP:" + up);
        if (up == 3 && down == 3 && move == 0) {
          up = 0;      move = 0;      down = 0;
          System.out.println("3 Clicked");
        }
        if (up == 2 && down == 2 && move == 0) {
          up = 0;      move = 0;      down = 0;
          System.out.println("2 Clicked");
        }    if (up == 1 && down == 1 && move == 0) {
          up = 0;      move = 0;      down = 0;
          System.out.println("1 Clicked");
        }
        if (up == 1 && down == 1 && move > 0) {
          up = 0;      move = 0;      down = 0;
          System.out.println("it's moved");
        }
        System.out.println("");    return super.onTouchEvent(event);
      }
    试着写了模拟,用那种方式截取一个事件结束了?
      

  5.   


    onTouchEvent中只有action_down action_up action_move三种事件,而且都是单击,如果想实现双击 三击,可以设置两次或三次单击事件的时间差来判断是否双击或三击。
      

  6.   

    int moveType;
    int MOVE_V = 2
    public boolean onTouchEvent(MotionEvent event) {
                switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
                         moveType = 0;
                          break;
                    case MotionEvent.ACTION_MOVE:
                           if (event.getHistorySize() > 0) {
    float hx = event.getHistoricalX(0);
    float hy = event.getHistoricalY(0);
    float distanceX = Math.abs(x - hx);
    float distanceY = Math.abs(y - hy); if (Math.max(distanceX, distanceY) > 14) {
    moveType = distanceY > distanceX ? MOVE_V : MOVE_H;
    } else {
    Log.i("ACTION_MOVE", moveType + ",d:" + Math.max(distanceX, distanceY));
    }
    }

    break;
                    case MotionEvent.ACTION_UP:
    if (moveType < MOVE_V) {
    long currTime = System.currentTimeMillis();
    if (currTime - clickTime < 300) {
    Activity activity = (Activity)view.getContext();
    Intent intent = new Intent(activity, KingLine.class);
    activity.startActivity(intent);
    }
    clickTime = currTime;

    break;
    }
      

  7.   


    这是从那个了粘贴过来的吧!如果发生了ACTION_MOVE或者ACTION_UP,那么一定曾经发生了ACTION_DOWN。
    这里结论你们测试了没?如果是Gallery空间的话,在它的父View中重载onTouchEvent()函数的话,只发生ACTION_MOVE,并不发生ACTION_DOWN。