首页 文章

如何使相同的ImageView识别滑动和单击事件?

提问于
浏览
2

当onclick,ontouch侦听器连接到同一 ImageView 时,触摸优先于点击 .

我希望 ImageView 对两种不同的动作做出反应:滑动和单击 . 我该怎么做呢?现在,我这样做:

swipe_area.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    x1 = event.getRawX();
                    break;
                case MotionEvent.ACTION_UP:
                    x2 = event.getRawX();
                    if (x1 < x2) {
                        switch (pencil_counter) {
                            case 1:
                                zad.setBackgroundResource(R.drawable.page13_zad6);
                                pered.setBackgroundResource(R.drawable.page13_pered6);
                                pencil_counter = 6;
                                break;
                            case 2:
                                zad.setBackgroundResource(R.drawable.page13_zad1);
                                pered.setBackgroundResource(R.drawable.page13_pered1);
                                pencil_counter = 1;
                                break;

1 回答

  • 2

    您可以通过GestureDetector过滤单击事件,如下所示:

    private GestureDetectorCompat simpleGestureHandler = new GestureDetectorCompat(getContext(), new MySimpleGestureListener());
    
    swipe_area.setOnTouchListener(new View.OnTouchListener()
    {
        @Override
        public boolean onTouch(View v, MotionEvent event)
        {
            if(simpleGestureHandler.onTouchEvent(event))
            {
               //if true then a single tap
            }
            else
            {
               //calculate swipe action
            }
        }
    }
    
    class MySimpleGestureListener extends GestureDetector.SimpleOnGestureListener
    {
        public boolean onSingleTapUp(MotionEvent e)
        {
            //single tap returns true so we know to register it over a swipe
            return true;
        }
    
        @Override
        public void onLongPress(MotionEvent event)
        {
    
        }
    
        @Override
        public boolean onDown(MotionEvent event)
        {
    
            return false;
        }
    
        @Override
        public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY)
        {
    
            return false;
        }
    
        @Override
        public boolean onScroll(MotionEvent event1, MotionEvent event2, float distanceX, float distanceY)
        {
    
    
            return false;
        }
    }
    

相关问题