expandableListview实现侧滑删除
来源:互联网 发布:修改屏幕分辨率软件 编辑:程序博客网 时间:2024/05/22 10:45
本文地址:http://blog.csdn.net/xiehao_95/article/details/44628491
使用swipelistview实现侧滑删除这样Demo已经很普及了,但是项目需要,expandableListview的item也要实现侧滑删除,参照swipelistview的ontouch事件,对getChildItem中的每个item设置点击事件以及ontouch事件。
使用到的jar包nineoldandroids-2.4.0.jar。
废话不多说上代码
首先,item项的布局文件,由FrameLayout实现上下覆盖,我们移动的就是上面的一层
<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:id="@+id/id_back" android:layout_width="fill_parent" android:layout_height="50dp" android:gravity="right" > <Button android:id="@+id/btn_delete" android:layout_width="wrap_content" android:layout_height="50dp" android:background="#00ffff" android:text="delete" /> </LinearLayout> <LinearLayout android:id="@+id/id_front" android:layout_width="fill_parent" android:layout_height="50dp" android:background="#00ff00" android:gravity="center" > <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </LinearLayout></FrameLayout>
重写expandableListview适配器的item项的点击和ontouch响应
@Overridepublic View getChildView(int groupPosition, final int position,boolean arg2, View convertView, ViewGroup parent) {convertView = LayoutInflater.from(context).inflate(R.layout.list_item,null);button = (Button) convertView.findViewById(R.id.btn_delete);textView = (TextView) convertView.findViewById(R.id.text);frontView = convertView.findViewById(R.id.id_front);frontView.setOnClickListener(new OnClickListener() {//因为重写ontouch事件使onChildClickListener失效,需要设置次监听来补救public void onClick(View v) {// TODO Auto-generated method stubToast.makeText(context, position + "条目按下", Toast.LENGTH_SHORT).show();}});new FrontViewToMove(frontView, listView);//关键语句,使用自己写的类来对frontView的ontouch事件复写,实现视图滑动效果button.setOnClickListener(new OnClickListener() { // 为button绑定事件,可以用此按钮来实现删除事件@Overridepublic void onClick(View v) {Toast.makeText(context, position + "按钮按下", Toast.LENGTH_SHORT).show();}});textView.setTextSize(20);textView.setTextColor(Color.DKGRAY);textView.setText(ChildrenItem[groupPosition][position]);return convertView;}
最后,从swipelistview中提取的,实现动画效果,和屏蔽listview上下滚动的关键类。
</pre><pre name="code" class="java">package com.example.movetodelete;import static com.nineoldandroids.view.ViewHelper.setTranslationX;import static com.nineoldandroids.view.ViewPropertyAnimator.animate;import android.annotation.SuppressLint;import android.support.v4.view.MotionEventCompat;import android.view.MotionEvent;import android.view.View;import android.view.View.OnTouchListener;import android.widget.ListView;import com.nineoldandroids.animation.Animator;import com.nineoldandroids.animation.AnimatorListenerAdapter;/** * @author XieHao * */@SuppressLint({ "ClickableViewAccessibility", "Recycle" })public class FrontViewToMove {private View frontView;// 所要滑动的视图private int downX;// 手指按下时的x坐标private boolean hasMoved = false;// 判断视图是否被移动private int xToMove = 200;// 视图所要被移动的距离,默认200private ListView listView;// 如果所需移动的视图为ListView或其子类的item项,传入视图容器,限制其上下滚动/** * @param frontView * 所要滑动的视图 */public FrontViewToMove(View frontView) {this.frontView = frontView;moveListener();}/** * @param frontView * 所要滑动的视图 * @param xToMove * 视图所要被移动的距离 */public FrontViewToMove(View frontView, int xToMove) {this.frontView = frontView;this.xToMove = xToMove;moveListener();}/** * @param frontView * 所要滑动的视图 * @param listView * 所要滑动的视图的容器 */public FrontViewToMove(View frontView, ListView listView) {this.frontView = frontView;this.listView = listView;moveListener();}/** * @param frontView * 所要滑动的视图 * @param listView * 所要滑动的视图的容器 * @param xToMove * 视图所要被移动的距离 */public FrontViewToMove(View frontView, ListView listView, int xToMove) {this.frontView = frontView;this.listView = listView;this.xToMove = xToMove;moveListener();}/** * 设置frontView的OnTouch监听,使其产生滑动的动画效果 */public void moveListener() {frontView.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View view, MotionEvent motionEvent) {switch (MotionEventCompat.getActionMasked(motionEvent)) {case MotionEvent.ACTION_DOWN: {downX = (int) motionEvent.getRawX();if (hasMoved) {downX = downX + xToMove;} else {view.onTouchEvent(motionEvent);// 当视图没有被移动,返回事件,使点击事件可用。}return true;}case MotionEvent.ACTION_UP: {float deltaX = motionEvent.getRawX() - downX;boolean swap = false;if ((deltaX > -xToMove / 2 && hasMoved)|| (deltaX < -xToMove && !hasMoved)) {swap = true;}if (swap) {if (!hasMoved) {generateRevealAnimate(frontView, -xToMove);hasMoved = true;} else {generateRevealAnimate(frontView, 0);hasMoved = false;}} else {if (hasMoved) {generateRevealAnimate(frontView, -xToMove);} else {generateRevealAnimate(frontView, 0);}}break;}case MotionEvent.ACTION_MOVE: {float deltaX = motionEvent.getRawX() - downX;MotionEvent cancelEvent = MotionEvent.obtain(motionEvent);cancelEvent.setAction(MotionEvent.ACTION_CANCEL| (motionEvent.getActionIndex() << MotionEvent.ACTION_POINTER_INDEX_SHIFT));if (deltaX < -10) {view.onTouchEvent(cancelEvent);// 当滑动时清空该视图的点击事件if (null != listView) {// 当视图滑动时限制listView的上下滚动listView.requestDisallowInterceptTouchEvent(false);listView.onTouchEvent(cancelEvent);}}if (!(deltaX > 0 && !hasMoved)) {setTranslationX(frontView, deltaX);}return true;}}return false;}});}/** * @param view * 所要移动的视图 * @param deltaX * 最终移动的距离 */private void generateRevealAnimate(final View view, float deltaX) {int moveTo = 0;moveTo = (int) deltaX;animate(view).translationX(moveTo).setDuration(10).setListener(new AnimatorListenerAdapter() {@Overridepublic void onAnimationEnd(Animator animation) {}});}}
最后一个类,完全可以当做工具类来使用,单独的控件,listview及其子类都适用此方法。
demo下载地址点击打开链接
0 1
- expandableListview实现侧滑删除
- ExpandableListView侧滑删除
- ExpandableListView仿ios左滑删除的实现
- 侧滑菜单DrawerLayout+ExpandableListView的实现
- ListView和ExpandableListView的侧滑删除操作
- ExpandableListView 和SwipeLayout 实现双层列表 ,childitem 滑动删除效果
- ExpandablelistView+swipeLayout 滑动删除
- ExpandableListView实现侧页导航栏目
- ExpandableListView删除Group的问题
- ExpandableListView基本实现
- ExpandableListView 长按实现
- CheckBox的ExpandableListView实现
- ExpandableListView实现多级菜单
- ExpandableListView的简单实现
- ExpandableListView的实现
- android ExpandableListView实现
- ExpandableListView轻松实现全选
- ExpandableListView效果实现
- Spring控制的事务管理的异常处理
- 用myeclipse启动tomcat报错
- Centos安装JDK,RPM安装JDK经典教程
- Spring Cache注解+Memcached
- 图片防盗链的解决办法
- expandableListview实现侧滑删除
- ASP.NET运行机制原理(一)
- Android缓存!
- uvalive 4253(暴力)
- Spring的事务配置
- 关系代数对于数据库的查询优化的指导意义
- 给编辑框设置新的窗口过程,实现按下Tab键和回车键自动切换到下一个编辑框
- RFID系统组成及其功能
- 2015最新站长seo优化技巧分享