android 自定义 滑动删除,Android_Android ListView实现仿iPhone实现左滑删除按钮的简单实例,需要自定义ListView。这里就交Fl - phpStudy...

Android ListView实现仿iPhone实现左滑删除按钮的简单实例

需要自定义ListView。这里就交FloatDelListView吧。

复写onTouchEvent方法。如下:

@Override

public boolean onTouchEvent(MotionEvent ev) {

switch (ev.getAction()) {

case MotionEvent.ACTION_DOWN:
          // 获取按下的条目视图(child view)

int childCount = getChildCount();

int[] listViewCoords = new int[2];

getLocationOnScreen(listViewCoords);

int x = (int) ev.getRawX() - listViewCoords[0];

int y = (int) ev.getRawY() - listViewCoords[1];

for (int i = 0; i < childCount; i++) {

downChild = getChildAt(i); //

Rect rect = new Rect();

assert downChild != null;

downChild.getHitRect(rect);

int childPosition = getPositionForView(downChild);

if (rect.contains(x, y)) {

downX = ev.getRawX();

int downPosition = childPosition;

velocityTracker = VelocityTracker.obtain();

assert velocityTracker != null;

velocityTracker.addMovement(ev);

break;

}

}

isSwipe = false;

break;

case MotionEvent.ACTION_MOVE:

velocityTracker.addMovement(ev);
          // 计算水平和垂直方向移动速度

velocityTracker.computeCurrentVelocity(1000);

float velocityX = Math.abs(velocityTracker.getXVelocity());

float velocityY = Math.abs(velocityTracker.getYVelocity());


          // 水平移动距离

float deltaX = ev.getRawX() - downX;

float deltaMode = Math.abs(deltaX);

if (deltaX > 150) {// right swipe(右滑)

isSwipeToLeft = false;

} else if (deltaX < -150) {// left swipe(左滑)

isSwipeToLeft = true;

}
          // 如果水平滑动距离大于零,并且水平滑动速率比垂直大,说明是水平滑动

if (deltaMode > 0 && velocityY < velocityX) {
            // 这里的FloatDelButtonLayout是自定义的LinearLayout。

((FloatDelButtonLayout) downChild).showDelButton(ev, isSwipeToLeft);

isSwipe = true;

}

break;

case MotionEvent.ACTION_CANCEL:

case MotionEvent.ACTION_UP:

downChild.setSelected(false);

if (isSwipe) {

isSwipe = false;

return true;

}

break;

}

return super.onTouchEvent(ev);

}

FloatDelButtonLayou.java :

public class FloatDelButtonLayout extends LinearLayout {


   // 提供删除按钮的接口

private OnDelListener delListener;


   // 当前视图在列表中的索引,在delListener中使用

private int index;


   // 右滑 还是 左滑?
private boolean isSwipeToLeft;

public void setOnDelListener(OnDelListener listener, int i) {

delListener = listener;

index = i;

}

public FloatDelButtonLayout(Context context) {

super(context, null);

}

public FloatDelButtonLayout(Context context, AttributeSet attrs) {

super(context, attrs, 0);

}

public FloatDelButtonLayout(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

}


   // 用来显示或者隐藏删除按钮。

public void showDelButton(MotionEvent ev, boolean isSwipeToLeft) {

this.isSwipeToLeft = isSwipeToLeft;

onTouchEvent(ev);

}

private OnClickListener clickDel = new OnClickListener() {

@Override

public void onClick(View v) {

delListener.onDel(index);

}

};


   /**
    * 这里的event是我们显示的从FloatDelListView的onTouchEvent里面传进来的,
*/

@Override

public boolean onTouchEvent(MotionEvent event) {

switch (MotionEventCompat.getActionMasked(event)) {

case MotionEvent.ACTION_MOVE:
          // 获取删除按钮对象,视图layout中必须要有id为del_button的Button标签

Button view = (Button) findViewById(R.id.del_button);

view.setText(R.string.del);
          // 设置Button的MarginLayoutParams,当然可以做成各种动作,比如渐隐之类的显示出来。

MarginLayoutParams layoutParams = (MarginLayoutParams) view.getLayoutParams();

assert layoutParams != null;

if (isSwipeToLeft) {

view.setVisibility(View.VISIBLE);

view.setOnClickListener(clickDel);

layoutParams.leftMargin = -200;

} else {

view.setVisibility(View.GONE);

layoutParams.leftMargin = 0;

}

view.setLayoutParams(layoutParams);

invalidate();

break;

}

return super.onTouchEvent(event);

}

public interface OnDelListener {

void onDel(int i);

}

}

以上这篇Android ListView实现仿iPhone实现左滑删除按钮的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持phpstudy。相关阅读:

mac系统中怎么打开rar/zip等压缩文件?

ajax同步异步简单实现

css教程之css设置字体颜色

Win10更新失败提示错误代码0x80240442怎么解决

win7网上邻居为什么无法使用?win7系统网上邻居无法使用的解决方法

Win10系统家庭版升级专业版失败提示无法升级你的Windows的故障原因及解决方法

JS iFrame加载慢怎么解决

一款纯css3实现的鼠标悬停动画按钮

Win10正式版升级遇到问题不用怕 20招轻松帮你搞定

Java开源工具iText生成PDF简单实例

jQuery javascript获得网页的高度与宽度的实现代码

Java中String性能优化

win8.1安装3月后更新假死问题解决教程

Win8系统命令提示符窗口中输入命令字符出错的解决方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值