使用按钮的自定义视图实现OnGestureListener

在过去的几个小时里,我一直在打破我的头脑,谷歌搜索谷歌,没有任何关于StackOverflow或其他地方的例子为我工作,所以这里... ...

我有一个自定义视图,它extends LinearLayout and implements GestureDetector.OnGestureListener

在我的自定义布局中,我有3个按钮,每个按钮都有一个点击监听器。 我想要的是能够在视图中的任何地方弹出来执行某些操作,但也能够点击按钮。

如果我在视图内部而不是其中的一个按钮上飞舞,我的onFling功能就会很好 。 如果我扔过其中一个按钮,它会在大多数情况下执行一次点击,或者在某些情况下不执行任何操作。

以下是我的代码的相关部分:

@Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
            float velocityY) {
        if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) {
            return false;
        }
        // right to left swipe
        if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
                && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
            viewFlipper.setInAnimation(slideLeftIn);
            viewFlipper.setOutAnimation(slideLeftOut);
            viewFlipper.showNext();
            return true;

        } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
                && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
            viewFlipper.setInAnimation(slideRightIn);
            viewFlipper.setOutAnimation(slideRightOut);
            viewFlipper.showPrevious();
            return true;
        }

        return false;
    }

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

    @Override
    public void onLongPress(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 onShowPress(MotionEvent e) {
        // TODO Auto-generated method stub

    }

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

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (gestureDetector.onTouchEvent(event)) {
            return gestureDetector.onTouchEvent(event);
        }
        return false;
    }

尝试任何组合返回true; 返回false; 我能想到...会感谢任何帮助! :)

谢谢!


以下是我最终解决它的问题......(只是修改了我的问题)。 不知道它是否是最好的解决方案,但它的工作原理:

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

@Override
    public boolean onTouchEvent(MotionEvent e) {
        return gestureDetector.onTouchEvent(e);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent e) {
        return onTouchEvent(e);
    }

这将允许抛出手势,即使在按钮上方也允许简单地点击按钮, 但是如果在视图后面有按钮的另一个视图,则有时点击会向后传递并且在视图后面的按钮上执行onClick。 解决方法是在前视图的根布局(LinearLayout,FrameLayout或其他)上添加"android:clickable="true"


这里的答案可能与你描述的情况有关https://stackoverflow.com/a/9182176/780700


也许你可以设置一个覆盖使用SurfaceView在你处理所有的翻牌:http://developer.android.com/reference/android/view/SurfaceView.html

使用顶部的surfaceView,您的按钮仍然可以工作,并且您的甩干应该能够毫无问题地克服按钮。

链接地址: http://www.djcxy.com/p/60341.html

上一篇: Custom view with buttons implements OnGestureListener

下一篇: How to preview a delete