热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

listview左右滑动item效果

这部分内容可以结合上一部分滑动删除的部分,做一个更好的滑动删除效果。功能:在listview上,左右滑动,对应的item有左

这部分内容可以结合上一部分滑动删除的部分,做一个更好的滑动删除效果。


功能:在listview上,左右滑动,对应的item有左右滑动效果

主要实现思路:

检测listview的touch操作,down时,记录位置,move时,做item滑动,up时,回滚到原始位置。




实现代码:

mListView.setOnTouchListener(new OnTouchListener() {private int mDownX = 0;private int mDownY = 0;// 滑动效果 private int mLastMoveX = 0;@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:mDownX = Math.round(event.getX());mDownY = Math.round(event.getY());mLastMoveX = mDownX;break;case MotionEvent.ACTION_MOVE: {int moveX = Math.round(event.getX());// 获取2次点击的item位置  item以外的pos是-1int downPosition = ((ListView)v).pointToPosition(mDownX, mDownY);// 点击在有效item内 才做处理boolean willScroll = (downPosition >= 0);if (willScroll) {// 需要先获取第一个可见的view  因为getChildAt获取view的时候,坐标是从第一个可见view开始的int firstVisiableIndex = ((ListView)v).getFirstVisiblePosition();View viewToScroll = ((ListView)v).getChildAt(downPosition - firstVisiableIndex);// 滑动viewToScroll.scrollBy(mLastMoveX - moveX, 0);mLastMoveX = moveX;}}break;case MotionEvent.ACTION_UP:case MotionEvent.ACTION_CANCEL: {int upX = Math.round(event.getX());int upY = Math.round(event.getY());// 获取2次点击的item位置  item以外的pos是-1int downPosition = ((ListView)v).pointToPosition(mDownX, mDownY);boolean willScroll = (downPosition >= 0);if (willScroll) {// 回滚int firstVisiableIndex = ((ListView)v).getFirstVisiblePosition();View viewToScroll = ((ListView)v).getChildAt(downPosition - firstVisiableIndex);viewToScroll.scrollBy(mLastMoveX - mDownX, 0);}}break;default:break;}return false;}});




效果:





推荐阅读
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有