【问题标题】:Disable onTouch when using onClick使用 onClick 时禁用 onTouch
【发布时间】:2012-12-25 12:48:39
【问题描述】:

我正在为视障人士创建一个 Android 应用程序,并且正在使用按钮菜单。

当用户在屏幕上滑动手指时,应用程序会读取按钮的标题。这是使用 onTouch 事件完成的。当用户单击按钮时,会发生一个动作(更改活动或任何其他动作),并伴有语音反馈。这是使用 onClick 事件完成的。

问题在于,当单击按钮时,两个事件都会触发(onTouch 和 onClick),并且 TTS 开始读取 onTouch 消息,半秒后停止并启动在 onClick 事件中声明的新消息。如何在调用 onClick 时禁用 onTouch 的触发。我理解这个问题,因为 onTouch 总是先于 onClick,但我不知道解决方案。

【问题讨论】:

    标签: android accessibility text-to-speech


    【解决方案1】:

    避免点击事件应用点击事件。

    首先创建手势类。

    class MyGestureDetector extends SimpleOnGestureListener 
    {
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
        {
            return false;
        }
        @Override
        public boolean onDoubleTap(MotionEvent e) 
        {
            return true;
        }
        @Override
        public boolean onSingleTapUp(MotionEvent e) 
        {
            return true;
        }
    }
    

    然后创建一个GestureDetectorgestureDetector;对象和

    gestureDetector=new GestureDetector(myContext, new MyGestureDetector());
    

    然后注册触摸事件。

    view.setOnTouchListener(this);
    

    像这样覆盖 onTouch 方法。

    @Override
        public boolean onTouch(View view, MotionEvent event) 
        {
            Button b=(Button) view;
            gestureDetector.onTouchEvent(event);
            return true;
        }
    

    在这里做一些关于单击和双击的任务。

    【讨论】:

    • 但我不使用双击。我使用 ontouch 在屏幕上移动并接收有关屏幕上显示的内容的音频反馈,并使用 onclick 激活屏幕上显示的元素。
    【解决方案2】:
       public final OnTouchListener mOnTouchListener = new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent rawEvent) {
            return false;
        }
    }; 
    

    object.setOnTouchListener(null);

    【讨论】:

    • 我不明白这如何回答我的问题。这只会禁用 onTouch,而我需要它们。
    猜你喜欢
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多