自定义listView添加滑动删除功能

今天研究了一下android里面的手势,结合昨天学习的自定义View,做了一个自定义的listview,继承自listView,添加了条目的滑动手势操作,滑动后出现一个删除按钮,点击删除按钮,触发一个删除的事件,在事件中进行删除当选行的元素,刷新listview。

一共分为以下几步进行:

1、新建一个按钮的布局文件,用来作为动态添加的按钮:layout_button.xml

<?xml version="1.0" encoding="utf-8"?>
<Button 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:text="删除" android:layout_width="wrap_content"  android:layout_height="wrap_content" android:id="@+id/btn1"/>

2、定义按钮显示,隐藏的动画效果,简单的缩放动画:

btn_hide.xml:

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
 android:fromXScale="1.0"  android:toXScale="0"  android:fromYScale="1.0"  android:toYScale="1.0"  android:pivotX="100%"  android:pivotY="0"  android:duration="200"  />

btn_show.xml:

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
 android:fromXScale="0"  android:toXScale="1.0"  android:fromYScale="1.0"  android:toYScale="1.0"  android:pivotX="100%"  android:pivotY="0"  android:duration="200"  />

3、自定义ListView,继承自listView,并实现OnTouchListener,OnGestureListener接口,代码就不一步一步写了,里面我尽可能的注释详细一些:MyListView.java

package com.example.viewtest;

import android.content.Context;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.view.animation.AnimationUtils; import android.widget.ListView; import android.widget.RelativeLayout;  /** * 项目名称:viewTest * 实现功能: 自定义ListView,增加滑动删除功能 * 类名称:MyListView * 类描述:(该类的主要功能) * 创建人:徐纪伟 * E-mail: xujiwei558@126.com * 创建时间:2014年11月2日 下午3:37:40 * 修改人: * 修改时间: * 修改备注: * @version */ public class MyListView extends ListView implements OnTouchListener,OnGestureListener {    /**   * 手势识别类   */   private GestureDetector gestureDetector;     /**   * 滑动时出现的按钮   */   private View btnDelete;     /**   * listview的每一个item的布局   */   private ViewGroup viewGroup;   /**   * 选中的项   */   private int selectedItem;     /**   * 是否已经显示删除按钮   */   private boolean isDeleteShow;     /**   * 点击删除按钮时删除每一行的事件监听器   */   private OnItemDeleteListener onItemDeleteListener;   /**   * 构造函数,初始化手势监听器等   * @param context   * @param attrs   */   public MyListView(Context context, AttributeSet attrs) {    super(context, attrs);    gestureDetector = new GestureDetector(getContext(),this);    setOnTouchListener(this);   }     public void setOnItemDeleteListener(OnItemDeleteListener onItemDeleteListener) {    this.onItemDeleteListener = onItemDeleteListener;   }   @Override   public boolean onTouch(View v, MotionEvent event) {    //得到当前触摸的条目    selectedItem = pointToPosition((int)event.getX(), (int)event.getY());    //如果删除按钮已经显示,那么隐藏按钮,异常按钮在当前位置的绘制    if (isDeleteShow) {     btnHide(btnDelete);     viewGroup.removeView(btnDelete);     btnDelete = null;     isDeleteShow = false;     return false;    }else{     //如果按钮没显示,则触发手势事件     //由此去触发GestureDetector的事件,可以查看其源码得知,onTouchEvent中进行了手势判断,调用onFling     return gestureDetector.onTouchEvent(event);    }      }   @Override   public boolean onDown(MotionEvent e) {    //得到当前触摸的条目    if (!isDeleteShow) {     selectedItem = pointToPosition((int)e.getX(), (int)e.getY());    }    return true;   } 

转载于:https://www.cnblogs.com/exmyth/p/4594359.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值