实现效果
点击删除按钮:
mAdapter.setOnRightItemClickListener(new SwipeAdapter.onRightItemClickListener() {
@Override
public void onRightItemClick(View v, int position) {
data.remove(position);
mListView.setAdapter(mAdapter);
Toast.makeText(MainActivity.this, "删除成功", Toast.LENGTH_SHORT).show();
}
});
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(MainActivity.this, "item onclick " + position, Toast.LENGTH_SHORT).show();
}
});
核心代码
case MotionEvent.ACTION_MOVE:
float dx = lastX - mFirstX;
float dy = lastY - mFirstY;
//确定滑动方向
if (mIsHorizontal == null) {
if (!judgeScrollDirection(dx, dy)) {
break;
}
}
//情况二:一个Item的右边布局已经显示,这时候左右滑动另外一个item,那个右边布局显示的item隐藏其右边布局
if (mIsHorizontal) {
if (mIsShown && mPreItemView != mCurrentItemView) {
hiddenRight(mPreItemView);
}
if (mIsShown && mPreItemView == mCurrentItemView) {
dx = dx - mRightViewWidth;
}
// 不能超过边界mRightViewWidth,scrollTo(x,0),向左移动为正,向右移动为负
if (dx < 0 && dx > -mRightViewWidth) {
mCurrentItemView.scrollTo((int) (-dx), 0);
}
return true;
} else {
//情况三:一个Item的右边布局已经显示,这时候上下滚动ListView,那么那个右边布局显示的item隐藏其右边布局
if (mIsShown) {
hiddenRight(mPreItemView);
}
}
break;
item的左滑和右滑是通过scrollTo(x,0)来实现的,向左移动x为正,向右移动x为负
dx为移动的距离
// 不能超过边界mRightViewWidth,scrollTo(x,0),向左移动为正,向右移动为负
if (dx < 0 && dx > -mRightViewWidth) {
mCurrentItemView.scrollTo((int) (-dx), 0);
}
引用blog地址:http://www.xuebuyuan.com/2013505.html
图上面,褐色的框,其实就是我们眼睛看到的手机界面,就是一个窗口。
而绿色的长方体呢,就是一块可以左右拉动的幕布啦,其实也就是我们要显示在窗口上面的内容,它其实是可以很大的,大到无限大,只是没在窗口中间的,所以我们就看不到。
第二幅图是向右滑的情况:对应的是scrollTo(-100,0);
第三幅图是向左滑的情况:对应的是scrollTo(100,0);
图示:
隐藏右边View触发存在几种情况
情况一:一个Item的右边布局已经显示,这时候点击任意一个item, 那么那个右边布局显示的item隐藏其右边布局
情况二:一个Item的右边布局已经显示,这时候左右滑动另外一个item,那个右边布局显示的item隐藏其右边布局
情况三:一个Item的右边布局已经显示,这时候上下滚动ListView,那么那个右边布局显示的item隐藏其右边布局
情况四:一个Item的右边布局已经显示,这时候左右滑动当前一个item,那个右边布局显示的item隐藏其右边布局
情况五:向左滑动一个item,且滑动的距离小于了右边View的宽度的一半,隐藏之。
参照http://blog.youkuaiyun.com/o279642707/article/details/51571060优化
代码下载:点击打开链接