抓住双击textview android

时间:2014-01-30 05:49:17

标签: java android

我希望双击textview,因为我使用了以下代码

但它仍无效:(

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);
            }


        });

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

4 个答案:

答案 0 :(得分:2)

尝试以下步骤。

第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;
    }

});

第2步

编写以下活动代码。此处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;
        }
    });

答案 1 :(得分:1)

答案 2 :(得分:1)

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

  

您是否使用GestureDetector.OnGestureListener,这是实施返回onDown()的{​​{1}}方法的最佳做法。这是因为所有手势都以true消息开头。如果您从onDown()返回false,默认为onDown(),则系统会假定您要忽略其余的手势,而GestureDetector.SimpleOnGestureListener的其他方法则永远不会被叫。这可能会在您的应用中导致意外问题。您应该从GestureDetector.OnGestureListener返回false的唯一时间是您是否真的想忽略整个手势。

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

答案 3 :(得分:0)

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

相关问题