我试图像这样为我的onTouchListner实现onLongClickListnerImageView

imageView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {

                ShowMessageToast("Long Touch ");
                return true ;
            }

        });
        imageView.setOnTouchListener(new ImageView.OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {

                action = event.getAction();
                    switch (action) {
                        case MotionEvent.ACTION_DOWN:
                           ShowMessageToast("Down ");
                            break;

                        case MotionEvent.ACTION_MOVE:
                            ShowMessageToast("Moved ");
                            break;


                        default:
                            break;
                    }

                return true;
            }


但是onLongClickListner在我停用onTouchListner(// comment)之前不起作用。

如果onTouchListner不作为注释(// ....),则它永远不会显示“长时间触摸”

ShowMessageToast("Moved ")是在Toast中显示消息的功能。

最佳答案

LongClickListenerTouchListener相互干扰,因为长按总是从触摸(ACTION_DOWN)开始。您想在TouchListener中检测到哪种手势?

如果您希望(例如)与滚动一起检测长按,则可以使用TouchListener和GestureListener进行处理。这是如何执行此操作的示例:

findViewById(R.id.myImageView).setOnTouchListener(new OnTouchListener() {
    private GestureDetector gestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() {
        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
            Log.d("TEST", "onScroll");
            // TODO Auto-generated method stub
            return super.onScroll(e1, e2, distanceX, distanceY);
        }

        /* (non-Javadoc)
         * @see android.view.GestureDetector.SimpleOnGestureListener#onLongPress(android.view.MotionEvent)
         */
        @Override
        public void onLongPress(MotionEvent e) {
            Log.d("TEST", "onLongPress");
            // TODO Auto-generated method stub
            super.onLongPress(e);
        }

        // ... implement here other callback methods like onFling, onScroll as necessary
    });

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        Log.d("TEST", "Raw event: " + event.getAction() + ", (" + event.getRawX() + ", " + event.getRawY() + ")");
        return gestureDetector.onTouchEvent(event);
    }
});


备注


这仅实现了onTouchListener,而无需onLonGClickListenerTouchListener只是将所有触摸事件传递给手势侦听器。每当检测到手势之一时,手势侦听器就会收集手势并调用回调方法。
手势可以是:滚动,猛击,点击(单击-确认不是双击或无需等待),双击,长按。
我的代码显示了一个长按和滚动的示例。仅在需要检测其他手势时实施其他回调。

10-07 19:33