Android开源框架之SwipeListView导入及模拟QQ侧滑

  SwipeListView是Github上的一个开源框架,地址:https://github.com/47deg/android-swipelistview

  SwipeListView was born out of the need to add swipe gestures to ListView on Android.

  因为开发需要整一个类似QQ侧滑删除的ListView,一开始准备自己写一个自定义layout作为item布局,依稀记得有个叫swipelistview的开源框架,结果还真可以拿来用,效果略有差别,但也满足项目要求了。那么,问题也来了,Github上最后的push的SwipelistView使用的是Gradle来构建,无奈鄙人几个月来一直在用es开始开发,考虑到可能要查看或者修改它的源码,就只好手工转为ecplise下的工程。下面先上Demo说明基本使用方法,方法都很简单,主要是网上搜索的资料都不是很完整,自己写一篇备忘,也供新手朋友们参考,再说说Gradle构建的swipelistview Module如何导入eclipse工程。

  一、引用swipelistview库开发带侧滑+按钮的ListView

    swipelistview的使用同listview的使用方法差不多,因为swipelistview是直接继承于ListView的,只是扩展了一些方法。

    官方给出了再XML布局文件中的基本写法:

 1 <com.fortysevendeg.swipelistview.SwipeListView
 2             xmlns:swipe="http://schemas.android.com/apk/res-auto"
 3             android:id="@+id/example_lv_list"
 4             android:listSelector="#00000000"
 5             android:layout_width="fill_parent"
 6             android:layout_height="wrap_content"
 7             swipe:swipeFrontView="@+id/front"
 8             swipe:swipeBackView="@+id/back"
 9             swipe:swipeActionLeft="[reveal | dismiss]"
10             swipe:swipeActionRight="[reveal | dismiss]"
11             swipe:swipeMode="[none | both | right | left]"
12             swipe:swipeCloseAllItemsWhenMoveList="[true | false]"
13             swipe:swipeOpenOnLongPress="[true | false]"
14             swipe:swipeAnimationTime="[miliseconds]"
15             swipe:swipeOffsetLeft="[dimension]"
16             swipe:swipeOffsetRight="[dimension]"
17             />

各属性说明如下:

swipeFrontView - Required - front view id.
swipeBackView - Required - back view id.
swipeActionLeft - Optional - left swipe action Default: 'reveal'
swipeActionRight - Optional - right swipe action Default: 'reveal'
swipeMode - Gestures to enable or 'none'. Default: 'both'
swipeCloseAllItemsWhenMoveList - Close revealed items on list motion. Default: 'true'
swipeOpenOnLongPress - Reveal on long press Default: 'true'
swipeAnimationTime - item drop animation time. Default: android configuration
swipeOffsetLeft - left offset
swipeOffsetRight - right offset

 

Demo地址,效果图:

我们自己定义swipelistview的item布局:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 
 3 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 4     android:layout_width="fill_parent"
 5     android:layout_height="fill_parent" >
 6 
 7     <LinearLayout
 8         android:id="@+id/backview"
 9         android:layout_width="match_parent"
10         android:layout_height="70dp"
11         android:background="#eee"
12         android:tag="back" >
13 
14         <Button
15             android:id="@+id/example_1"
16             android:layout_width="0dp"
17             android:layout_height="wrap_content"
18             android:layout_weight="2"
19             android:background="@null" />
20 
21         <Button
22             android:id="@+id/edit"
23             android:layout_width="0dp"
24             android:layout_height="60dp"
25             android:layout_gravity="center"
26             android:layout_weight="1"
27             android:background="@drawable/edit"
28             android:text="编辑" />
29 
30         <Button
31             android:id="@+id/del"
32             android:layout_width="0dp"
33             android:layout_height="60dp"
34             android:layout_gravity="center"
35             android:layout_marginLeft="10dp"
36             android:layout_weight="1"
37             android:background="@drawable/del"
38             android:text="删除" />
39     </LinearLayout>
40 
41     <RelativeLayout
42         android:id="@+id/frontview"
43         android:layout_width="match_parent"
44         android:layout_height="70dp"
45         android:background="#ffffff"
46         android:orientation="vertical"
47         android:tag="front" >
48 
49         <TextView
50             android:id="@+id/example_row_tv_title"
51             android:layout_width="fill_parent"
52             android:layout_height="wrap_content"
53             android:layout_centerInParent="true"
54             android:textSize="16sp" />
55     </RelativeLayout>
56 
57 </FrameLayout>

 

 

在布局swipeview所在布局文件中的定义

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     xmlns:swipe="http://schemas.android.com/apk/res-auto"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     tools:context=".MainActivity" >
 7 
 8     <com.fortysevendeg.swipelistview.SwipeListView
 9         android:id="@+id/example_lv_list"
10         android:layout_width="match_parent"
11         android:layout_height="match_parent"
12         swipe:swipeActionLeft="reveal"
13         swipe:swipeActionRight="reveal"
14         swipe:swipeAnimationTime="0"
15         swipe:swipeBackView="@+id/backview"
16         swipe:swipeCloseAllItemsWhenMoveList="true"
17         swipe:swipeFrontView="@+id/frontview"
18         swipe:swipeMode="both"
19         swipe:swipeOffsetLeft="0dp"
20         swipe:swipeOffsetRight="0dp"
21         swipe:swipeOpenOnLongPress="false" />
22 
23 </RelativeLayout>

  使用注意点:

     为了让每次显示滑动一条数据,需要在你自己实现的BaseSwipeListViewListener中重写onStartOpen方法,在里面调用mSwipeListView.closeOpenedItems()。

  二、导入swipelistview到eclipse工程

    也许有人一看是gradle构建的android项目就不知道怎么办了,以为as构建的项目是不能之间导入eclipse工程的。幸运的是,swipelistview工程极其简洁,手工导入eclipse也是比较的容易的。

    1. 新建一个android工程,勾选标记为libraray,且不用创建activity。

      

    2. 将下载下来的android-swipelistview-master工程中\android-swipelistview-master\swipelistview\src\main\java下的com文件下直接粘贴到新建工程的src目录下。

同时把\android-swipelistview-master\swipelistview\src\main目录下的res资源放到eclipse下新建的Android库工程对应目录下。

    3. 做完上面两部还没有完,因为swipelistview依赖nineoldandroids库,且目前的swipelistview版本依赖nineoldandroids-2.4.0+,下载地址https://github.com/JakeWharton/NineOldAndroids,可以只下载

nineoldandroids-2.4.0.jar,直接放在新建android库工程的libs目录下即可。至此导入工作完成。

 

posted @ 2015-03-24 14:34  指尖的舞客  阅读(4450)  评论(3编辑  收藏