生活随笔
收集整理的這篇文章主要介紹了
利用swipelistview完成qq聊天列表右滑删除功能
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
感謝HarryWeasley整理:http://blog.csdn.net/harryweasley/article/details/41413547
前言:前段時間,由于自己比較悠閑,沒有什么工作上的事情所做,所以當時就想,何不做一下qq聊天列表的item右滑出現后面的視圖,然后我就開始著手自己做,之后無意間發現了可以利用一個github開源項目swiplistview完成,但是當我查看那些swiplistview的相關文檔時,很不全面,github官網上下載的和之前他們寫的文檔已經有所不同,所以在這里我就重新來寫一下怎么使用swiplistview的準備階段。
之前的文檔都是說,當從官網上下載下來后,有兩個文件,一個是lib:android-swiplistview,另一個是例子:SwipListViewExampleActivity,但是現在下載后,解壓后是這樣的
顯然已經和之前的不一樣了,現在的官網上是用了gradle來構造Android程序,但我以前根本沒有接觸過gradle,所以只能自己去找以前的那個swiplistview。當時我也是糾結了很久,自己翻墻出去,各種Google,最后終于找到了,swiplistview,我之后會全部上傳,共享給大家。
下面是qq的效果圖:
下面是我這個項目的效果圖:
現在我們進入正題:
我們一共需要兩個jar包,一個swiplistview,如圖所示:這三個下載地址http://download.csdn.net/detail/harryweasley/8190519
1. 引入android-swipelistview庫:導入開源庫,用Import選項,然后Android選項下的“Existing Android Code Into Workspace”引入庫;在這里將“copy projects into workspace”前面打鉤哦
2.引入android-swipelistview的依賴庫nineoldandroids-2.4.0.jar:建立一個libs文件夾,將nineoldandroids-2.4.0.jar拷貝到libs文件夾之下;
3.引入android-swipelistview的依賴內部庫android-support-v4.jar:項目的Android Tools選項,“Add Support Library”來增加android-support-v4庫;(注:如果找不到對應的support庫,可以通過SDK Manager來進行下載)
4.編譯android-swipelistview庫的jar包:項目的Properties選項,Android選項,勾選"Is Library";
5.編譯android-swipelistview項目,在項目的bin目錄應該能看到android-swipelistview.jar包。
這樣,我們就完成了swiplistview的庫了。
然后我們自己建立一個Android程序SwipListView進行測試,建好后,開始導入庫,項目的Properties選項,Android選項,Library框選擇add按鈕添加swipelistview.jar包;
這里需要注意:swipelistview這個lib必須和SwiplistView在同一工作區間,否則導入的包前面會有紅叉。如圖所示
我們可以看下官網上關于SwipListView的描述
If you decide to use SwipeListView as a view, you can define it in your xml layout like this:
<com.fortysevendeg.swipelistview.SwipeListViewxmlns:swipe="http://schemas.android.com/apk/res-auto"android:id="@+id/example_lv_list"android:listSelector="#00000000"android:layout_width="fill_parent"android:layout_height="wrap_content"swipe:swipeFrontView="@+id/front"swipe:swipeBackView="@+id/back"swipe:swipeActionLeft="[reveal | dismiss]"swipe:swipeActionRight="[reveal | dismiss]"swipe:swipeMode="[none | both | right | left]"swipe:swipeCloseAllItemsWhenMoveList="[true | false]"swipe:swipeOpenOnLongPress="[true | false]"swipe:swipeAnimationTime="[miliseconds]"swipe:swipeOffsetLeft="[dimension]"swipe:swipeOffsetRight="[dimension]"/>
- swipeFrontView?-?Required?- front view id. 即ListView Item正常顯示的控件Id,且必須與Item的布局文件中的控件id一樣
- swipeBackView?-?Required?- back view id. ?手指滑動時顯示的,隱藏在FrontView后面,且必須與item的布局文件中控件Id一樣
- swipeActionLeft?- Optional - left swipe action Default: 'reveal' ?左滑的動作,默認reveal,即顯示BackView,還有dismiss,choice會觸發響應的方法。
- swipeActionRight?- Optional - right swipe action Default: 'reveal' 同上
- swipeMode?- Gestures to enable or 'none'. Default: 'both' 設置左滑、右滑、都支持
- swipeCloseAllItemsWhenMoveList?- Close revealed items on list motion. Default: 'true' 當滾動listview時,關閉所有展開的Item,最好不要設置為false,由于item的復用,false存在一些問題。
- swipeOpenOnLongPress?- Reveal on long press Default: 'true' 長按時觸發顯示
- swipeAnimationTime?- item drop animation time. Default: android configuration 動畫時間長度
- swipeOffsetLeft?- left offset 左偏移量
- swipeOffsetRight?- right offset 右偏移量
上面是基本屬性,下面開始上代碼:
首先是activity_main.xml下的代碼:
[java]?view plaincopy
<RelativeLayout?xmlns:android="http://schemas.android.com/apk/res/android"?? ????xmlns:tools="http://schemas.android.com/tools"?? ????android:layout_width="match_parent"?? ????android:layout_height="match_parent"?? ????tools:context=".MainActivity"?>?? ?? ????<com.fortysevendeg.swipelistview.SwipeListView?? ????????xmlns:swipe="http://schemas.android.com/apk/res-auto"?? ????????android:id="@+id/example_lv_list"?? ????????android:layout_width="fill_parent"?? ????????android:layout_height="fill_parent"?? ????????swipe:swipeActionLeft="reveal"?? ????????swipe:swipeBackView="@+id/id_back"?? ????????swipe:swipeCloseAllItemsWhenMoveList="true"?? ????????swipe:swipeFrontView="@+id/id_front"?? ????????swipe:swipeMode="left"?? ????????swipe:swipeOffsetLeft="200dip"?? ????????swipe:swipeOffsetRight="0dp"?? ????????swipe:swipeOpenOnLongPress="true"?/>?? ?? </RelativeLayout>??
接下來是itm.xml的代碼:
[java]?view plaincopy
<FrameLayout?xmlns:android="http://schemas.android.com/apk/res/android"?? ????xmlns:tools="http://schemas.android.com/tools"?? ????android:layout_width="match_parent"?? ????android:layout_height="60dp"?>?? ?? ????<LinearLayout?? ????????android:id="@+id/id_back"?? ????????android:layout_width="match_parent"?? ????????android:layout_height="match_parent"?? ????????android:background="#ffcccccc"?? ????????android:gravity="center|right"?>?? ?? ????????<Button?? ????????????android:id="@+id/id_remove"?? ????????????android:layout_width="60dp"?? ????????????android:layout_height="wrap_content"?? ????????????android:layout_gravity="center"?? ????????????android:layout_marginRight="4dp"?? ????????????android:background="@android:color/holo_green_light"?? ????????????android:text="Delete"?? ????????????android:textColor="#fff"?>?? ????????</Button>?? ????</LinearLayout>?? ?? ????<LinearLayout?? ????????android:id="@+id/id_front"?? ????????android:layout_width="match_parent"?? ????????android:layout_height="match_parent"?? ????????android:background="#ffffffff"?>?? ?? ????????<TextView?? ????????????android:id="@+id/id_text"?? ????????????android:layout_width="wrap_content"?? ????????????android:layout_height="wrap_content"?? ????????????android:layout_marginLeft="10dp"?? ????????????android:gravity="center_vertical"?? ????????????android:minHeight="?android:attr/listPreferredItemHeight"?? ????????????android:textAppearance="?android:attr/textAppearanceLarge"?? ????????????android:textColor="#000"?? ????????????android:textSize="25sp"?>?? ????????</TextView>?? ????</LinearLayout>?? ?? </FrameLayout>??
這里要強調一下:對應布局的id和swipeListView中的frontView和backView的Id一致。
接下來是DataAdapter的代碼
[java]?view plaincopy
package?com.example.swiplistview;?? ?? import?java.util.List;?? ?? import?android.content.Context;?? import?android.view.LayoutInflater;?? import?android.view.View;?? import?android.view.View.OnClickListener;?? import?android.view.ViewGroup;?? import?android.widget.BaseAdapter;?? import?android.widget.Button;?? import?android.widget.TextView;?? ?? import?com.fortysevendeg.swipelistview.SwipeListView;?? ?? public?class?DataAdapter?extends?BaseAdapter{?? ????private?List<String>?mDatas;???? ????private?LayoutInflater?mInflater;???? ????private?SwipeListView?mSwipeListView?;???? ???? ????public?DataAdapter(Context?context,?List<String>?datas?,?SwipeListView?swipeListView)???? ????{???? ????????this.mDatas?=?datas;???? ????????mInflater?=?LayoutInflater.from(context);???? ????????mSwipeListView?=?swipeListView;???? ????}???? ???? ????@Override???? ????public?int?getCount()???? ????{???? ????????return?mDatas.size();?? ?????????? ????}???? ???? ????@Override???? ????public?Object?getItem(int?position)???? ????{???? ????????return?mDatas.get(position);???? ????}???? ???? ????@Override???? ????public?long?getItemId(int?position)???? ????{???? ????????return?position;???? ????}???? ???? ????@Override???? ????public?View?getView(final?int?position,?View?convertView,?ViewGroup?parent)???? ????{???? ????????convertView?=?mInflater.inflate(R.layout.item,?null);???? ???? ????????TextView?tv?=?(TextView)?convertView.findViewById(R.id.id_text);???? ????????Button?del?=?(Button)?convertView.findViewById(R.id.id_remove);???? ????????tv.setText(mDatas.get(position));???? ????????del.setOnClickListener(new?OnClickListener()???? ????????{???? ????????????@Override???? ????????????public?void?onClick(View?v)???? ????????????{???? ????????????????mDatas.remove(position);???? ????????????????notifyDataSetChanged();???? ?????????????????? ? ? ???? ????????????????mSwipeListView.closeOpenedItems();???? ????????????}???? ????????});???? ???????????? ????????return?convertView;???? ????}???? }??
最后是MainActivity的代碼了,都比較簡單:
[java]?view plaincopy
package?com.example.swiplistview;?? ?? import?java.util.ArrayList;?? import?java.util.List;?? ?? import?android.app.Activity;?? import?android.os.Bundle;?? ?? import?com.fortysevendeg.swipelistview.BaseSwipeListViewListener;?? import?com.fortysevendeg.swipelistview.SwipeListView;?? ?? public?class?MainActivity?extends?Activity?{?? ????SwipeListView?swipeListView;?? ????List<String>?mDatas;?? ????DataAdapter?adapter;?? ?? ????@Override?? ????protected?void?onCreate(Bundle?savedInstanceState)?{?? ????????super.onCreate(savedInstanceState);?? ????????setContentView(R.layout.activity_main);?? ????????mDatas?=?new?ArrayList<String>();?? ????????for?(int?i?=?0;?i?<?20;?i++)?{?? ????????????mDatas.add("這是記錄呢。。"?+?i);?? ????????}?? ?? ????????swipeListView?=?(SwipeListView)?findViewById(R.id.example_lv_list);?? ????????adapter?=?new?DataAdapter(this,?mDatas,?swipeListView);?? ????????swipeListView.setAdapter(adapter);?? ?? ????????swipeListView.setSwipeListViewListener(new?BaseSwipeListViewListener()?{?? ?????????????? ????????????@Override?? ????????????public?void?onListChanged()?{?? ?? ????????????????super.onListChanged();?? ?? ????????????}?? ?? ????????????@Override?? ????????????public?void?onClickFrontView(int?position)?{?? ?????????????????? ????????????????super.onClickFrontView(position);?? ?????????????????? ????????????}?? ?? ????????});?? ????}?? }??
這樣就大功告成了。
上面的都是最基本的功能,完成了上面的那些,然后我們就可以做相應的點擊事件了。所以一起加油吧。
最后還有一個我在github下載的一個Demo,但并不是47deg的,是一個普通人寫的,我給她上傳了,下載地址http://download.csdn.net/detail/harryweasley/8190525
這里多說一下,你剛導入Eclipse時,會報一個不能解析android-14,你重啟一下Eclipse,就好了。第二個問題,重啟Eclipse后,bin文件里又有錯誤了,刪除bin文件,Eclipse會重新自動生成一個,這樣兩個小bug就解決了。
總結
以上是生活随笔為你收集整理的利用swipelistview完成qq聊天列表右滑删除功能的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。