Android的SwipeToDismiss是github上一个第三方开源框架(github上的项目链接地址:
https://github.com/romannurik/Android-SwipeToDismiss
)。该开源项目旨在:使得一个ListView的item在用户的手指在屏幕上左滑或者右滑时候,删除当前的这个ListView Item。
此种特效在新版的Android中应用不少,比如在Android 5.0及以上版本中,通知栏下拉菜单中的条目,就是这种操作效果,用户把通知栏下拉出来,手指轻触某一项,左滑或者右滑,删除(清除)此项。
在 https://github.com/romannurik/Android-SwipeToDismiss 上下载到到库文件有两个(此说是基于截止2015年7月27日的版本,后续版本也许会有所不同):SwipeDismissListViewTouchListener.java 和 SwipeDismissTouchListener.java 。如果只是打算简单的只是支持一个ListView列表中item左滑/右滑删除,那么仅仅只导入SwipeDismissListViewTouchListener.java这一个库文件即可。
此种特效在新版的Android中应用不少,比如在Android 5.0及以上版本中,通知栏下拉菜单中的条目,就是这种操作效果,用户把通知栏下拉出来,手指轻触某一项,左滑或者右滑,删除(清除)此项。
在 https://github.com/romannurik/Android-SwipeToDismiss 上下载到到库文件有两个(此说是基于截止2015年7月27日的版本,后续版本也许会有所不同):SwipeDismissListViewTouchListener.java 和 SwipeDismissTouchListener.java 。如果只是打算简单的只是支持一个ListView列表中item左滑/右滑删除,那么仅仅只导入SwipeDismissListViewTouchListener.java这一个库文件即可。
现在就给出一个简单例子,说明如何改造一个标准ListView,使其支持左右滑动某个item然后删除之。
效果如图:
java代码如下:
package com.example.swipetodismiss;
import java.util.ArrayList;
import java.util.List;
import com.example.android.swipedismiss.SwipeDismissListViewTouchListener;
import com.example.android.swipedismiss.SwipeDismissListViewTouchListener.DismissCallbacks;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends Activity {
private ListView list_view;
private List<String> list;
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list_view = (ListView) findViewById(R.id.list_view);
list = new ArrayList<String>();
for (int i = 0; i < 30; i++) {
list.add("测试数据" + i);
}
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
list_view.setAdapter(adapter);
// 将ListView传递过来。
SwipeDismissListViewTouchListener swipeListener = new SwipeDismissListViewTouchListener(list_view,
new DismissCallbacks() {
// 此处将执行删除,记得要notifyDataSetChanged()。
@Override
public void onDismiss(ListView listView, int[] reverseSortedPositions) {
for (int pos : reverseSortedPositions) {
list.remove(pos);
}
adapter.notifyDataSetChanged();
}
@Override
public boolean canDismiss(int position) {
return true;
}
});
list_view.setOnTouchListener(swipeListener);
}
}