我想检测手指被拖过ImageView。我得到了我的ImageView,创建了GestureDetector和View.OnTouchListener的实例,然后将View.OnTouchListener设置为ImageView。
OnTouchListener检测所有触摸(“触摸发生”)并将它传递给GestureDetector,但它从不调用其方法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);
答案 0 :(得分:2)
onDown 方法必须始终返回 true ,否则检测器不会对以下事件做出反应,因为不会调用onScroll。
答案 1 :(得分:1)
我认为您还需要覆盖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);
}
}
答案 2 :(得分:0)
通过扩展SimpleOnGestureListener尝试使用自定义的手势监听器类。通过这样做,您也可以覆盖所有上述方法。
答案 3 :(得分:0)
首先解决使用@Override时遇到的错误。
这主要是因为较低的Java编译器配置[应用程序属性 - > Java编译器 - >编译器合规性级别]确保它是1.6。
一旦解决了这个问题,请再次使用@Override表示法。