Android 在自定义视图上正确实现GestureDetector.OnDoubleTapListener

Android 在自定义视图上正确实现GestureDetector.OnDoubleTapListener,android,Android,我有一个CustomAutoCompleteTextView,我希望能够调用showDropDown()当用户双击它时 正如标题所说,实现了GestureDetector。OnDoubletaListener听起来是个不错的解决方案,但一旦将强制方法添加到我的自定义视图中,我就不知道如何设置整个过程了 以下是实施的方法: @Override public boolean onSingleTapConfirmed(MotionEvent e) { return false

我有一个
CustomAutoCompleteTextView
,我希望能够调用
showDropDown()当用户双击它时

正如标题所说,
实现了GestureDetector。OnDoubletaListener
听起来是个不错的解决方案,但一旦将强制方法添加到我的自定义视图中,我就不知道如何设置整个过程了

以下是实施的方法:

 @Override
    public boolean onSingleTapConfirmed(MotionEvent e) {
        return false;
    }

    @Override
    public boolean onDoubleTap(MotionEvent e) {
        return false;
    }

    @Override
    public boolean onDoubleTapEvent(MotionEvent e) {
        return false;
    }
我想归档这样的内容:

@Override
        public boolean onDoubleTapEvent(MotionEvent e) {
            showDropDown();//AutoCompleteTextView's this line is enough but the event is never triggered
            return super.doYourThing();
        }
1) 创建一个新的
GestureDetector()

2) 在
CustomAutoCompleteTextView
中添加
OnTouchListener

txt.setOnTouchListener(new View.OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        detector.onTouchEvent(event);
        return false;
    }
});
1) 创建一个新的
GestureDetector()

2) 在
CustomAutoCompleteTextView
中添加
OnTouchListener

txt.setOnTouchListener(new View.OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        detector.onTouchEvent(event);
        return false;
    }
});

我找到了一种比
实现GestureDetector更好的方法。OnDoubleTapListener
要存档此方法,请注意此解决方案适用于在自定义视图中实现双击及其所有实例

boolean firstTouch = false;
    long time;
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if(event.getAction() == event.ACTION_DOWN){
            if(firstTouch && (System.currentTimeMillis() - time) <= 300) {
                firstTouch = false;
                showDropDown();//In my case I want to showDropDown() change this line for whatever you want to do
            } else {
                firstTouch = true;
                time = System.currentTimeMillis();
                return super.onTouchEvent(event);
                //return false;Use this if you dont want to call default onTouchEvent()
            }
        }
        return super.onTouchEvent(event);
         //return false;Use this if you dont want to call default onTouchEvent()
    }
boolean firstTouch=false;
长时间;
@凌驾
公共布尔onTouchEvent(运动事件){
if(event.getAction()==event.ACTION\u DOWN){

如果(firstTouch&(System.currentTimeMillis()-time)我找到了一种比
实现GestureDetector.OnDoubletaListener
更好的方法来存档此文件,请注意,此解决方案用于在自定义视图中实现双击及其所有实例

boolean firstTouch = false;
    long time;
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if(event.getAction() == event.ACTION_DOWN){
            if(firstTouch && (System.currentTimeMillis() - time) <= 300) {
                firstTouch = false;
                showDropDown();//In my case I want to showDropDown() change this line for whatever you want to do
            } else {
                firstTouch = true;
                time = System.currentTimeMillis();
                return super.onTouchEvent(event);
                //return false;Use this if you dont want to call default onTouchEvent()
            }
        }
        return super.onTouchEvent(event);
         //return false;Use this if you dont want to call default onTouchEvent()
    }
boolean firstTouch=false;
长时间;
@凌驾
公共布尔onTouchEvent(运动事件){
if(event.getAction()==event.ACTION\u DOWN){

if(firstTouch&(System.currentTimeMillis()-time)像这样仍然没有触发我想是的,但我可以猜测,因为你没有共享一个代码剪辑,显示你在哪里以及如何添加/创建你的TextView我相信这将工作,但它对我有一个问题,抱歉没有指定,我有几个CustomAutoCompleteTextView,我希望他们所有人都这样做,所以这种方式将是很多的work.我想要的是在扩展AutoCompleteTextView的自定义类中实现双击功能。我刚刚找到了一种方法!为您的时间伙伴共享一个min.PD:Ty!这样仍然不会触发我想是的,但我可以猜,因为您没有共享显示您添加/创建TextView的位置和方式的代码,我相信这将我工作,但它对我来说有一个问题,很抱歉没有指定,我有几个CustomAutoCompleteTextView,我希望他们都这样做,这样做将是大量的工作。我想要的是在自定义类中实现双击功能,扩展AutoCompleteTextView。我刚刚找到一种方法!在一分钟内共享。PD:Ty为您的时间伙伴!