Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何防止视图被“删除”;按「;触控事件_Android_Android View - Fatal编程技术网

Android 如何防止视图被“删除”;按「;触控事件

Android 如何防止视图被“删除”;按「;触控事件,android,android-view,Android,Android View,我有一个RecyclerView,带有我自己的OnItemClickListener实现。为了突出显示单击的项目,我使用一个简单的选择器作为其背景: <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/item_inner_rect_pressed" android:state_pressed="true" /> &l

我有一个
RecyclerView
,带有我自己的
OnItemClickListener
实现。为了突出显示单击的项目,我使用一个简单的
选择器作为其背景:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/item_inner_rect_pressed" android:state_pressed="true" />
<item android:drawable="@drawable/item_inner_rect" />
 </selector>

EDIT#2:我想我需要弄清楚
视图
何时被“按下”(通过非“单击”)以获得起点。欢迎提出任何想法。

onTouch()
方法中,返回
false
。这将告诉Android,
OnTouchListener
不负责处理手势。

我不能简单地返回
false
,因为我的
OnTouchListener
将停止工作。我添加了接受你的答案的代码,因为它通常是正确的。我只需要返回
false
而不是从
OnTouch()
返回,而是在调用
onswip()
回调后从
onFling()
方法返回,因为我不关心返回值为什么不向选择器xml添加更多状态,我想了想,但问题是:
视图
对于点击和触摸事件都会进入“按下”状态。我需要它这样做,只有在点击事件。添加其他状态(如selected或focused)不会在简单单击时触发背景更改。
public class OnSwipeTouchListener implements View.OnTouchListener {

private final GestureDetector gestureDetector;

public OnSwipeTouchListener(Context context) {
    gestureDetector = new GestureDetector(context, new GestureListener());
}

//not needed
public void onSwipeLeft() {
}

public void onSwipeRight() {
}

public boolean onTouch(View v, MotionEvent event) {
    return gestureDetector.onTouchEvent(event);
}

private final class GestureListener extends GestureDetector.SimpleOnGestureListener {

    private static final int SWIPE_DISTANCE_THRESHOLD = 100;
    private static final int SWIPE_VELOCITY_THRESHOLD = 100;
    private static final int XY_VELOCITY_DIFFERENCE_THRESHOLD = 200;

    @Override
    public boolean onDown(MotionEvent e) {
        return false;
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

        if (e1 == null || e2 == null)
            return false;

        float distanceX = e2.getX() - e1.getX();
        float distanceY = e2.getY() - e1.getY();
        if (Math.abs(distanceX) > Math.abs(distanceY)
                && (Math.abs(velocityX) - Math.abs(velocityY) > XY_VELOCITY_DIFFERENCE_THRESHOLD)
                && Math.abs(distanceX) > SWIPE_DISTANCE_THRESHOLD
                && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
            if (distanceX > 0)
                onSwipeRight();
            else
                onSwipeLeft();
            return true;
        }
        return false;
    }
 }
}