Android 滑动以删除列表项
我想实现一个滑动手势来删除Android 滑动以删除列表项,android,android-layout,android-listview,android-gesture,Android,Android Layout,Android Listview,Android Gesture,我想实现一个滑动手势来删除列表视图中的行,类似于android通知 现在我只有一个ListView和一个onTouchListener——也就是说,我已经有了滑动检测功能 gestureDetector = new GestureDetector(this, new GestureListener()); onTouchListener = new TouchListener(); listview.setOnTouchListener(onTouchListener); MyGest
列表视图中的行,类似于android通知
现在我只有一个ListView
和一个onTouchListener
——也就是说,我已经有了滑动检测功能
gestureDetector = new GestureDetector(this, new GestureListener());
onTouchListener = new TouchListener();
listview.setOnTouchListener(onTouchListener);
MyGestureListener
class:
protected class GestureListener extends SimpleOnGestureListener
{
private static final int SWIPE_MIN_DISTANCE = 150;
private static final int SWIPE_MAX_OFF_PATH = 100;
private static final int SWIPE_THRESHOLD_VELOCITY = 100;
private MotionEvent mLastOnDownEvent = null;
@Override
public boolean onDown(MotionEvent e)
{
mLastOnDownEvent = e;
return super.onDown(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) {
Toast.makeText(getApplicationContext(), "Right Swipe", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "Left Swipe", Toast.LENGTH_SHORT).show();
}
return true;
}
else if (Math.abs(dX) < SWIPE_MAX_OFF_PATH && Math.abs(velocityY)>=SWIPE_THRESHOLD_VELOCITY && Math.abs(dY)>=SWIPE_MIN_DISTANCE ) {
if (dY>0) {
Toast.makeText(getApplicationContext(), "Up Swipe", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "Down Swipe", Toast.LENGTH_SHORT).show();
}
return true;
}
return false;
}
}
有关于这方面的教程/示例吗
谢谢如果您的刷卡检测正常,只需删除该项目即可。为此,以下代码将在屏幕外删除该项目
yourListViewAdapter.yourListItems.remove(position);
yourListViewAdapter.notifyDataSetChanged();
我想我真的必须在列表中的每一行上实现一个触摸式侦听器。->查找自定义阵列适配器
关于投掷物品,我发现了一个很好的教程,它回答了我的大部分问题:将此项添加到滑动检测中,可以获得很好的效果:
//if swipe to left detected
Display display = getWindowManager().getDefaultDisplay();
v.clearAnimation();
TranslateAnimation translateAnim = new TranslateAnimation(0, -display.getWidth(), 0, 0);
translateAnim.setDuration(250);
translateAnim.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
yourListViewAdapter.yourListItems.remove(position);
yourListViewAdapter.notifyDataSetChanged();
}
});
v.startAnimation(translateAnim);
在我寻找某种刷卡监听器的过程中,我偶然发现了罗曼·努里克的刷卡代码。[1] :
我一直在我的应用程序中使用它,它就像一个符咒
它的编写方式与实现的侦听器相同,因此我发现它很容易使用。我是否需要在每个列表项上实现滑动检测?或者我可以将其保留在listview上,并使用其他方法删除该项目吗?我如何才能使该项实际抛出视图?@marcin no,您可以将其设置为listview。点击查看如何准确地实现这一点,我本应该更好地检查这个图坦卡蒙。这是关于在画布上画画的。所以这真的不是我的问题。
//if swipe to left detected
Display display = getWindowManager().getDefaultDisplay();
v.clearAnimation();
TranslateAnimation translateAnim = new TranslateAnimation(0, -display.getWidth(), 0, 0);
translateAnim.setDuration(250);
translateAnim.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
yourListViewAdapter.yourListItems.remove(position);
yourListViewAdapter.notifyDataSetChanged();
}
});
v.startAnimation(translateAnim);