Android "swipe left to right to delete",列表项上的手势,ICS 样式

标签 android android-listview android-animation android-gesture

我正在尝试为 Android ICS 及更高版本的通知实现“从左向右滑动以删除”手势。 我的应用程序中有一个 ListView 。我有手势检测器工作。 但是当我在一个特定的列表项上从左向右滑动时,我希望该项目与我的手指一起移动。当我移动我的手指,超过某个点时,只有到那时该项目才应该删除自己。我的 OnFling() 方法目前还没有做到这一点。

我如何修改 OnFling() 方法使项目随着我的手指移动?

我的手势监听类是

class GestureListener extends SimpleOnGestureListener {
        private static final int SWIPE_MIN_DISTANCE = 50;
        private static final int SWIPE_MAX_OFF_PATH = 100;
        private static final int SWIPE_THRESHOLD_VELOCITY = 25;

        private MotionEvent mLastOnDownEvent = null;

        @Override
        public boolean onDown(MotionEvent e) {
            mLastOnDownEvent = e;
            return super.onDown(e);
        }

        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), "On Single TAP up ", Toast.LENGTH_SHORT).show();
            return super.onSingleTapUp(e);
        }

        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
                float velocityY) {
            if (e1 == null) {
                e1 = mLastOnDownEvent;
            }
            if (e1 == null || e2 == null) {
                return false;
            }

            float dX = e2.getX() - e1.getX();
            float dY = e1.getY() - e2.getY();

            if (Math.abs(dY) < SWIPE_MAX_OFF_PATH
                    && Math.abs(velocityX) >= SWIPE_THRESHOLD_VELOCITY
                    && Math.abs(dX) >= SWIPE_MIN_DISTANCE) {
                if (dX > 0) {
                    int position = tasks.pointToPosition((int) e1.getX(),
                            (int) e1.getY());

                    int _id = (int) tasks.getItemIdAtPosition(position);
                    databaseConnector.deleteContact(_id);

                    new DeleteRow(_id, contactAdapter, getApplicationContext());
                contactAdapter.notifyDataSetChanged();


                    Toast.makeText(getApplicationContext(),
                            "Right Swipe" + _id, Toast.LENGTH_SHORT).show();
                } else {

                    Toast.makeText(getApplicationContext(), "Left Swipe",
                            Toast.LENGTH_SHORT).show();
                }
                return true;
            }

            return false;
        }

最佳答案

如果您想实现此类功能,您应该看看 Roman Nurik 在 github 上的滑动关闭代码 fragment 。你可以找到它here .

关于Android "swipe left to right to delete",列表项上的手势,ICS 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15059168/

相关文章:

Android:Activity.onPause() 之后的点击事件

java - 如何正确将 Maven 翻译为 gradle

android - 如何在android中的垂直 ListView 中创建水平 ListView

android - 禁用 NavigationDrawer 图标的幻灯片动画

android - Android中textview旋转动画后应用Transformation

android - 如何创建应用图像文件夹以显示在 Android 画廊中

android - Retrofit2 java.lang.IllegalStateException : Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $ 错误

Android:无法使用 CursorLoader 访问 ContentProvider 内的光标数据

java - Android:添加到列表中的最后一个对象会覆盖所有其他对象

java - Android 中非 View 对象的动画