如何通过ImageView检测手势



我想检测在ImageView上拖动的手指。我得到我的ImageView,创建GestureDetector和View.OnTouchListener的实例,然后将View.OnTTouchListener设置为ImageView。

OnTouchListener检测所有触摸("发生触摸"),我将它们传递给手势检测器,但它从不调用其方法onScroll或onFling。我做错了什么?贝娄你可以看到相关来源:

    myImageView = (ImageView) findViewById(R.id.imageView1);
    myGestureDetector = new GestureDetector(this,
            new GestureDetector.OnGestureListener() {
                @Override
                public boolean onSingleTapUp(MotionEvent e) {
                    // TODO Auto-generated method stub
                    return false;
                }
                @Override
                public void onShowPress(MotionEvent e) {
                    // TODO Auto-generated method stub
                }
                @Override
                public boolean onScroll(MotionEvent e1, MotionEvent e2,
                        float distanceX, float distanceY) {
                    // TODO Auto-generated method stub
                    Log.d("gestures", "scroll");
                    return true;
                }
                @Override
                public void onLongPress(MotionEvent e) {
                    // TODO Auto-generated method stub
                }
                @Override
                public boolean onFling(MotionEvent e1, MotionEvent e2,
                        float velocityX, float velocityY) {
                    // TODO Auto-generated method stub
                    Log.d("gestures", "fling");
                    return true;
                }
                @Override
                public boolean onDown(MotionEvent e) {
                    // TODO Auto-generated method stub
                    return false;
                }
            });

    gestureListener = new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            if (myGestureDetector.onTouchEvent(event)) {
                Log.d("gestures", "here");
                return true;
            }
            Log.d("gestures", "touch occured");
            return false;
        }
    };
    myImageView.setOnTouchListener(gestureListener);
OnGestureListener的

onDown方法必须始终返回true,否则检测器将不会对以下事件做出反应,因此不会调用onScroll。

我认为您还需要重写onTouchEvent方法。我在imageview上检测到了这样的onFling()手势。

   @Override
    public boolean onTouchEvent(MotionEvent event){
                return myGestureDetector.onTouchEvent(event);
    }

在我这边工作的代码是:

 public class AddNewTask extends Activity implements OnClickListener,OnTouchListener ,GestureDetector.OnGestureListener
    {
  private GestureDetector gestures;
    private ImageView imgViewPreview;
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.addtask);
     gestures = new GestureDetector(AddNewTask.this,
                         this);
    imgViewPreview.setOnTouchListener(this);
    }
    public boolean onTouch(View v, MotionEvent event)
     {
        if(v==imgViewPreview)
          if(gestures.onTouchEvent(event))
             return true;

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

通过扩展SimpleOnGestureListener,尝试使用自定义的手势侦听器类。同样,通过这样做,您将能够覆盖上述所有方法。

首先解决使用@Override时所面临的错误。

这主要是因为Java编译器配置[应用程序属性->Java编译器->编译器合规级别]较低。请确保为1.6。

解决此问题后,请使用@Override符号重试。

相关内容

  • 没有找到相关文章

最新更新