【问题标题】:catch double click on textview android双击textview android
【发布时间】:2015-04-25 20:07:45
【问题描述】:

我想双击文本视图,因为我在下面的代码中使用过

但它仍然无法正常工作:(

TextView txtOne;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    txtOne = (TextView) findViewById(R.id.txtOne);
    txtOne.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            System.out.println("DRAG");
            return gestureDetector.onTouchEvent(event);

        }
    });
}

final GestureDetector gestureDetector = new GestureDetector(
        new GestureDetector.SimpleOnGestureListener() {

            @Override
            public boolean onDoubleTap(MotionEvent e) {
                System.out.println("Double Tap");
                return super.onDoubleTap(e);
            }

            @Override
            public boolean onSingleTapUp(MotionEvent e) {
                System.out.println("One Click");
                return super.onSingleTapUp(e);
            }


        });

只有拖动在调用,而不是“双击”和“一键”从未调用过

【问题讨论】:

  • 你的问题解决了吗?
  • 没有@ChintanRathod 它没有解决:(

标签: java android


【解决方案1】:

尝试以下步骤。

步骤 1

在您的活动中编写以下代码。

// initialize the Gesture Detector
gd = new GestureDetector(this,new OnGestureListener() {
    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public void onShowPress(MotionEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
            float distanceY) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public void onLongPress(MotionEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
            float velocityY) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean onDown(MotionEvent e) {
        // TODO Auto-generated method stub
        return false;
    }
});

// set the on Double tap listener
gd.setOnDoubleTapListener(new OnDoubleTapListener() {
    @Override
    public boolean onDoubleTap(MotionEvent e) {
        Toast.makeText(SplashActivity.this,"Double Tap",Toast.LENGTH_LONG).show();
    return false;
    }

    @Override
    public boolean onDoubleTapEvent(MotionEvent e) {
        // if the second tap hadn't been released and it's being moved

        return false;
    }

    @Override
    public boolean onSingleTapConfirmed(MotionEvent e) {
        // TODO Auto-generated method stub
        return false;
    }

});

第二步

为活动编写以下代码。这里gd 将是GestureDetector 对象。

txt.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            gd.onTouchEvent(event);
            return false;
        }
    });

【讨论】:

  • 它只检测“onShowPress 和 onLongPress”
【解决方案2】:

【讨论】:

  • 你能描述一下我应该在哪里使用吗?
  • @Raghunandan 谢谢:D
  • @EleshBaraiya 还有一件事,我怀疑你为 TextView 使用的 XML 布局代码,你能发布 XML 布局吗?
【解决方案3】:

对于SimpleGestureDetector,您需要覆盖onDown() 并返回true 以触发双击检测器。

无论您是否使用GestureDetector.OnGestureListener,最好实现一个返回trueonDown() 方法。这是因为所有手势都以onDown() 消息开头。如果你从onDown() 返回false,就像GestureDetector.SimpleOnGestureListener 默认做的那样,系统假设你想忽略手势的其余部分,并且GestureDetector.OnGestureListener 的其他方法永远不会被调用。这有可能在您的应用程序中导致意外问题。唯一应该从onDown() 返回false 的情况是,如果您真的想忽略整个手势。

来源:http://developer.android.com/training/gestures/detector.html

【讨论】:

    【解决方案4】:

    这是一个执行双击的好网站...我使用它并且工作 doubleCLICK

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-04
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多