SlideAndDragListView的使用
来源:互联网 发布:算法时代pdf下载 编辑:程序博客网 时间:2024/06/05 15:12
http://download.csdn.net/detail/a_person_alone/9519537SlideAndDragListView支持ListView的Item的拖动排序、左右滑动事件,可自定义左右滑动显示文字、图标、位移,同时支持onItemClick、onItemLongClick等监听器,提供丰富的回调接口。在QQ5.0有类似功能
SlideAndDragListView的gitHub地址:https://github.com/yydcdut/SlideAndDragListView
因为这个开源项目是用Android Studio开发的,如果不会使用Android Studio 导入开源项目的话,可以看看我的这篇博客:http://blog.csdn.net/a_person_alone/article/details/51397783
导入所需要的开源项目以后,接下来就看看怎么使用了。
主要布局代码
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white" android:orientation="vertical" > <com.yydcdut.sdlv.SlideAndDragListView android:id="@+id/lv_edit" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="@android:color/black" android:listSelector="@drawable/list_selector" android:dividerHeight="0.5dip" android:paddingLeft="8dip" android:paddingRight="8dip"> </com.yydcdut.sdlv.SlideAndDragListView></RelativeLayout>
上面的代码基本没有什么难度,就不多解释了,其他比较简单的xml文件我就在源码里面一起给出了
MainActivity代码,我基本也有了注释,应该也不难理解,理解源代码,应该把apk安装在手机里看看效果,再来看源代码。apk可以在源码的如下截图里面获取,两个都可以用。安装 到手机上可以检测效果。
package com.zengfeng.draglist;import android.annotation.TargetApi;import android.app.Activity;import android.content.pm.ApplicationInfo;import android.graphics.Color;import android.os.Build;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AbsListView;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;import com.yydcdut.sdlv.DragListView;import com.yydcdut.sdlv.Menu;import com.yydcdut.sdlv.MenuItem;import com.yydcdut.sdlv.SlideAndDragListView;import java.util.List;public class MainActivity extends Activity { //每一行的隐藏菜单 private Menu nMenu; //每一行的填充数据源 private List<ApplicationInfo> mListApp; //滑动和拖动控件 private SlideAndDragListView<ApplicationInfo> mListView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化数据 initData(); //初始化list中的隐藏菜单项 initMenu(); //初始化控件 mListView = (SlideAndDragListView<ApplicationInfo>) findViewById(R.id.lv_edit); //为mListView设置隐藏菜单 mListView.setMenu(nMenu); //设置适配器 mListView.setAdapter(mAdapter); /** * 设置监听器 */ //设置长按监听 mListView.setOnListItemLongClickListener(new SlideAndDragListView.OnListItemLongClickListener() { @Override public void onListItemLongClick(View view, int position) { Toast.makeText(MainActivity.this, "长按list" + position, Toast.LENGTH_SHORT).show(); } }); //设置移动控件监听 mListView.setOnDragListener(new DragListView.OnDragListener() { @Override //移动控件开始 public void onDragViewStart(int position) { Toast.makeText(MainActivity.this, "移动控件开始" + position, Toast.LENGTH_SHORT).show(); } @Override //移动控件进行中 public void onDragViewMoving(int position) { Toast.makeText(MainActivity.this, "移动控件进行中" + position, Toast.LENGTH_SHORT).show(); } @Override //移动控件移动停止 public void onDragViewDown(int position) { Toast.makeText(MainActivity.this, "移动控件移动停止" + position, Toast.LENGTH_SHORT).show(); } //这里还有一个参数 }, mListApp); //点击监听 mListView.setOnListItemClickListener(new SlideAndDragListView.OnListItemClickListener() { @Override public void onListItemClick(View v, int position) { Toast.makeText(MainActivity.this, "点击" + position, Toast.LENGTH_SHORT).show(); } }); //滑动监听 mListView.setOnSlideListener(new SlideAndDragListView.OnSlideListener() { @Override //滑动打开监听 public void onSlideOpen(View view, View parentView, int position, int direction) { Toast.makeText(MainActivity.this, "滑动打开监听" + position, Toast.LENGTH_SHORT).show(); } @Override //滑动关闭监听 public void onSlideClose(View view, View parentView, int position, int direction) { Toast.makeText(MainActivity.this, "滑动关闭监听" + position, Toast.LENGTH_SHORT).show(); } }); //隐藏菜单子项点击监听 mListView.setOnMenuItemClickListener(new SlideAndDragListView.OnMenuItemClickListener() { @Override public int onMenuItemClick(View v, int itemPosition, int buttonPosition, int direction) { switch (direction){ //如果是打开左边的item case MenuItem.DIRECTION_LEFT: switch (buttonPosition){ case 0: //无效果 return Menu.ITEM_NOTHING; case 1: //滑动关闭listView的子项 return Menu.ITEM_SCROLL_BACK; } break; //如果是打开右边的item case MenuItem.DIRECTION_RIGHT: switch (buttonPosition){ case 0: //滑动关闭listView的子项 return Menu.ITEM_SCROLL_BACK; case 1: //从底部到顶部删除listView的子项,选择这个会调用 // setOnItemDeleteListener的onItemDelete方法 return Menu.ITEM_DELETE_FROM_BOTTOM_TO_TOP; } break; } return Menu.ITEM_NOTHING; } }); //删除Item监听 mListView.setOnItemDeleteListener(new SlideAndDragListView.OnItemDeleteListener() { @Override public void onItemDelete(View view, int position) { Toast.makeText(MainActivity.this, "删除" + position, Toast.LENGTH_SHORT).show(); mListApp.remove(position - mListView.getHeaderViewsCount()); mAdapter.notifyDataSetChanged(); } }); //滚动监听 mListView.setOnListScrollListener(new SlideAndDragListView.OnListScrollListener() { @Override //滑动状态改变监听 public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { case SlideAndDragListView.OnListScrollListener.SCROLL_STATE_IDLE: break; case SlideAndDragListView.OnListScrollListener.SCROLL_STATE_TOUCH_SCROLL: break; case SlideAndDragListView.OnListScrollListener.SCROLL_STATE_FLING: break; } } @Override //当滚动的时候触发 public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { //会一直调用 //Toast.makeText(MainActivity.this, "正在滚动" , Toast.LENGTH_SHORT).show(); } }); } //初始化数据方法 public void initData() { //得到手机上App的相关信息 mListApp = getPackageManager().getInstalledApplications(0); } //初始化list中的菜单项 @TargetApi(Build.VERSION_CODES.LOLLIPOP) public void initMenu() { //第一个参数表示是否设置背景透明而拖,第二个参数表示是否可以滑过。 nMenu = new Menu(true, true); //设置各种属性 nMenu.addItem(new MenuItem.Builder().setWidth(150)//设置宽度 //设置背景 //.setBackground(getResources().getDrawable(R.drawable.index, getApplicationContext().getTheme())) .setText("无效果") .setTextColor(Color.GRAY) .setTextSize(14) .build()); nMenu.addItem(new MenuItem.Builder().setWidth(150)//设置宽度 //设置背景 //.setBackground(getResources().getDrawable(R.drawable.index, getApplicationContext().getTheme())) .setText("关闭") .setTextColor(Color.BLACK) .setTextSize(14) .build()); nMenu.addItem(new MenuItem.Builder().setWidth(200)//设置宽度 //设置背景 //.setBackground(getResources().getDrawable(R.drawable.index, getApplicationContext().getTheme())) .setText("关闭") .setDirection(MenuItem.DIRECTION_RIGHT) .setTextColor(Color.BLACK) .setTextSize(14) .build()); nMenu.addItem(new MenuItem.Builder().setWidth(200)//设置宽度 //设置背景 //.setBackground(getResources().getDrawable(R.drawable.index, getApplicationContext().getTheme())) .setText("删除") .setTextColor(Color.BLUE) .setDirection(MenuItem.DIRECTION_RIGHT) //.setIcon(getResources().getDrawable(R.mipmap.ic_launcher, getApplicationContext().getTheme())) .setTextSize(14) .build()); } //适配器 private BaseAdapter mAdapter = new BaseAdapter() { @Override public int getCount() { return mListApp.size(); } @Override public Object getItem(int position) { return mListApp.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder vh; if(convertView==null){ vh=new ViewHolder(); //加载布局 convertView= LayoutInflater.from(MainActivity.this).inflate(R.layout.item_custom_btn,null); //初始化控件 vh.imgLogo=(ImageView)convertView.findViewById(R.id.img_item_edit); vh.txtName=(TextView)convertView.findViewById(R.id.txt_item_edit); vh.btnClick=(Button)convertView.findViewById(R.id.btn_item_click); //设置按钮点击监听 vh.btnClick.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Object o=v.getTag(); if(o instanceof Integer){ Toast.makeText(MainActivity.this,"点击按钮"+((Integer)o),Toast.LENGTH_LONG).show(); } } }); convertView.setTag(vh); }else{ vh=(ViewHolder)convertView.getTag(); } //得到每一行的app相关信息 ApplicationInfo item=(ApplicationInfo)this.getItem(position); //设置控件 vh.txtName.setText(item.loadLabel(getPackageManager())); vh.imgLogo.setImageDrawable(item.loadIcon(getPackageManager())); vh.btnClick.setText(position + ""); vh.btnClick.setTag(position); return convertView; } }; private class ViewHolder{ public ImageView imgLogo; public TextView txtName; public Button btnClick; }}
上述代码就讲解到这里,有什么问题可以留言
源代码地址:http://download.csdn.net/detail/a_person_alone/9519537
0 0
- SlideAndDragListView的使用
- SlideAndDragListView学习笔记
- SlideAndDragListView侧滑删除
- GUID使用的使用
- ${}的使用
- 的使用
- @[],@()的使用
- ->的使用
- +、-、*、/、%的使用
- &&的使用
- %:的使用
- Makefile中使用$$的使用
- Makefile中使用$$的使用
- Red5的使用--使用日志
- prefernce的使用具体使用
- 【工具使用】git 的使用
- 关于使用AsyncTaskLoader的使用
- 使用CABasicAnimation的基本使用
- CentOS 6.5升级Python和安装IPython
- 牛逼哄哄的SLAM技术即将颠覆哪些领域
- httpUrlConnection请求数据
- C#获取post请求的json字符串
- 2016年武汉科技大学邀请赛网络赛 I题
- SlideAndDragListView的使用
- Java中最常用到的排序方法详解
- mysql 忘记root密码找回方法
- linux 消息队列实例
- httpclient网络请求数据
- log4j slf4j
- extjs datefield 设置显示和编辑格式为‘Y-m-d’
- 从零开始学习SLAM
- 自拉比赛B题(区间更新)