当 onclick、ontouch 监听器附加到同一个 ImageView
时,触摸优先于单击。
我想要一个 ImageView
对 2 个不同的移动使用react:滑动和单击。我该怎么做呢?现在,我这样做:
swipe_area.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
x1 = event.getRawX();
break;
case MotionEvent.ACTION_UP:
x2 = event.getRawX();
if (x1 < x2) {
switch (pencil_counter) {
case 1:
zad.setBackgroundResource(R.drawable.page13_zad6);
pered.setBackgroundResource(R.drawable.page13_pered6);
pencil_counter = 6;
break;
case 2:
zad.setBackgroundResource(R.drawable.page13_zad1);
pered.setBackgroundResource(R.drawable.page13_pered1);
pencil_counter = 1;
break;
最佳答案
您可以通过 GestureDetector 过滤单击事件,如下所示:
private GestureDetectorCompat simpleGestureHandler = new GestureDetectorCompat(getContext(), new MySimpleGestureListener());
swipe_area.setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
if(simpleGestureHandler.onTouchEvent(event))
{
//if true then a single tap
}
else
{
//calculate swipe action
}
}
}
class MySimpleGestureListener extends GestureDetector.SimpleOnGestureListener
{
public boolean onSingleTapUp(MotionEvent e)
{
//single tap returns true so we know to register it over a swipe
return true;
}
@Override
public void onLongPress(MotionEvent event)
{
}
@Override
public boolean onDown(MotionEvent event)
{
return false;
}
@Override
public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY)
{
return false;
}
@Override
public boolean onScroll(MotionEvent event1, MotionEvent event2, float distanceX, float distanceY)
{
return false;
}
}
关于android - 如何使同一个 ImageView 识别滑动和单击事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31562164/