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目录下即可。至此导入工作完成。