我正在尝试在同一个Imageview上实现单击和滚动,我成功实现了单击,但现在我不知道如何实现滚动。我需要在单击和滚动时实现不同的操作,对于单击我想要开始一个活动我已经完成了,现在滚动,我需要调用一个方法说" updateData"。请帮我。以下是我的代码
public class GestureListener extends
GestureDetector.SimpleOnGestureListener {
@Override
public boolean onDown(MotionEvent e) {
return true;
}
// event when double tap occurs
@Override
public boolean onSingleTapUp(MotionEvent e) {
tapped = !tapped;
if (tapped) {
Intent intent = new Intent(activity, MainActivity.class);
activity.startActivity(intent);
}
} else {
}
return true;
}
}
image.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return gestureDetector.onTouchEvent(event);
}
});
答案 0 :(得分:0)
一种简单的方法是扩展GestureDetector.SimpleOnGestureListener
,然后为ImageView
设置此自定义侦听器。
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.activity_main);
final GestureDetectorCompat gdt = new GestureDetectorCompat(this, new CustomGestureListener());
final ImageView imageView = (ImageView) findViewById(R.id.imageView);
imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(final View view, final MotionEvent event) {
gdt.onTouchEvent(event);
return true;
}
});
}
private class CustomGestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
Log.d(TAG, "onSingleTapConfirmed() called with: " + "e = [" + e + "]");
return super.onSingleTapConfirmed(e);
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
// do some stuff maybe..
// do other stuff
updateData(e1, e2, distanceX, distanceY);
return super.onScroll(e1, e2, distanceX, distanceY);
}
}
private void updateData(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
Log.d(TAG, "updateData() called with: " + "e1 = [" + e1 + "], e2 = [" + e2 + "], distanceX = [" + distanceX + "], distanceY = [" + distanceY + "]");
}
}