我正在实现一个像下面的问题一样的onfling探测器: 删除网格布局的删除手势检测

但是,我只是无法让它工作。 如果我设置了我的应用程序的某种方式导致这个问题(也许是ASYNCTASK?),这就是我的应用程序的结构:

(试图使这个恰好格式化的列表,但它出于某种原因拧紧以下的代码?)


--Mapactivity创建MapView。

--mapView创建一个ASYNCTASK从URL获取XML。

- ASYNCTASK的--onPostexecute()解析XML并使用获取的数据添加逐个overiedoverlay

- Otep()逐个overizoverlay的函数使用loaderimageview( http://www.anddev.org/novice-turorials-f8/imageview-with-loading-spinner-t49439.html

--ontap()函数然后调用下面列出的popuppanel类的show()函数

您可以从下面的代码中看到,评论说明的线条工作。但是,与Mygesturedetector类一起使用时,Ontouch和Onfling事件永远不会击中。

class PopupPanel {
    View popup;
    boolean isVisible = false;
    private static final int SWIPE_MIN_DISTANCE = 120;
    private static final int SWIPE_MAX_OFF_PATH = 250;
    private static final int SWIPE_THRESHOLD_VELOCITY = 200;
    private GestureDetector gestureDetector;
    public View.OnTouchListener gestureListener;

    PopupPanel(Context context, int layout) {
        ViewGroup parent = (ViewGroup) map.getParent();

        popup = ((MapActivity) context).getLayoutInflater().inflate(layout, parent, false);

        SelectFilterActivity selectFilterActivity = new SelectFilterActivity();
        popup.setOnClickListener(selectFilterActivity);

// This works!
//            popup.setOnTouchListener(new View.OnTouchListener() {
//                public boolean onTouch(View v, MotionEvent event) {
//                    Toast.makeText(map.getContext(), "Touched", Toast.LENGTH_SHORT).show();
//                    return false;
//                }
//            });

        // Gesture detection
        gestureDetector = new GestureDetector(new MyGestureDetector());
        gestureListener = new View.OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                if (gestureDetector.onTouchEvent(event)) {
                    return true;
                }
                return false;
            }
        };
    }

    class MyGestureDetector extends SimpleOnGestureListener {
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            try {
                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) {
                    Toast.makeText(map.getContext(), "Left Swipe", Toast.LENGTH_SHORT).show();
                }  else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    Toast.makeText(map.getContext(), "Right Swipe", Toast.LENGTH_SHORT).show();
                }
            } catch (Exception e) {
                // nothing
            }
            return false;
        }

        @Override
        public boolean onDown(MotionEvent e) {
            return true;
        }
    }

    View getView() {
        return (popup);
    }

    void show(boolean alignTop) {
        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);

        if (alignTop) {
            lp.addRule(RelativeLayout.ALIGN_PARENT_TOP);
            lp.setMargins(0, 20, 0, 0);
        } else {
            lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
            lp.setMargins(0, 0, 0, 60);
        }

        hide();

        ((ViewGroup) map.getParent()).addView(popup, lp);
        isVisible = true;
    }

    void hide() {
        if (isVisible) {
            isVisible = false;
            ((ViewGroup) popup.getParent()).removeView(popup);
        }
    }
}
.

有帮助吗?

解决方案

I'm not 100% sure if this is the reason, but I didn't see call to View.setOnTouchListener in your code for gestureListener. I would've expected line;

setOnTouchListener(gestureListener)

After you've created it.

其他提示

Try returning true from your MyGestureDetector.onDown. The superclass implementation is to return false which then suppresses the delivery of future events until the touch is released.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top