最近做项目,有一类似qq列表侧滑删除的需求,有一点不同的是当条目滑出来的时候,条目有箭头指示,如下:
先说一下实现思路,在网上找了一个开源控件,自己修改了一下代码实现的,
参考:https://github.com/baoyongzhang/SwipeMenuListView
在这里感谢作者的贡献。
主要部分代码:
一、设置监听,itemMenu。
private void initUiAndListener() {
// TODO Auto-generated method stub
mListView = (SlideAndDragListView) findViewById(R.id.lv_edit);
mListView.setMenu(mMenuList);
mListView.setAdapter(mAdapter);
// mListView.setOnListScrollListener(this);
// mListView.setOnItemCloseListener(this);
mListView.setOnSlideListener(this);
mListView.setOnMenuItemClickListener(this);
// mListView.setOnListItemLongClickListener(this);
mListView.setOnListItemClickListener(this);
}
private void initMenu() {
// TODO Auto-generated method stub
mMenuList = new ArrayList<Menu>(2);
Menu menu0 = new Menu(false,false,0);
menu0.addItem(new MenuItem.Builder().setWidth((int) getResources().getDimension(R.dimen.slv_item_bg_btn2_width))
.setBackground(new ColorDrawable(Color.RED))
.setText("删除")
.setDirection(MenuItem.DIRECTION_RIGHT)
.setTextColor(Color.WHITE)
.build());
menu0.addItem(new MenuItem.Builder().setWidth((int) getResources().getDimension(R.dimen.slv_item_bg_btn2_width))
.setBackground(new ColorDrawable(Color.GRAY))
.setText("添加")
.setDirection(MenuItem.DIRECTION_RIGHT)
.setTextColor(Color.WHITE)
.build());
Menu menu1 = new Menu(true,false,1);
menu1.addItem(new MenuItem.Builder().setWidth((int) getResources().getDimension(R.dimen.slv_item_bg_btn2_width))
.setBackground(new ColorDrawable(Color.RED))
.setText("删除")
.setDirection(MenuItem.DIRECTION_RIGHT)
.setTextColor(Color.WHITE)
.build());
menu1.addItem(new MenuItem.Builder().setWidth((int) getResources().getDimension(R.dimen.slv_item_bg_btn2_width))
.setBackground(new ColorDrawable(Color.GRAY))
.setText("查看")
.setDirection(MenuItem.DIRECTION_RIGHT)
.setTextColor(Color.GREEN)
.build());
mMenuList.add(menu0);
mMenuList.add(menu1);
}
二、对item滑出时的监听做处理
@Override
public void onSlideOpen(View view, View parentView, int position, int direction) {
Log.e(TAG,"onSlideOpen:position --" + position + "---direction---" +direction);
ImageView img = (ImageView) view.findViewById(R.id.imageView1);
img.setImageBitmap(rotateImg(R.drawable.ic_left_arrow, 180));
}
@Override
public void onSlideClose(View view, View parentView, int position, int direction) {
Log.e(TAG,"onSlideClose:position --" + position + "---direction---" +direction);
ImageView img = (ImageView) view.findViewById(R.id.imageView1);
img.setImageBitmap(rotateImg(R.drawable.ic_left_arrow, 0));
}
/**
* @param id 资源引用
* @param degress 旋转角度
* @return bitmap employ: XXX.setImageDrawable(bitmap)
*/
private Bitmap rotateImg(int id, float degress){
Bitmap bitmap= BitmapFactory.decodeResource(getResources(), id);
//创建操作图片是用的matrix对象
Matrix matrix=new Matrix();
matrix.setRotate(degress);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
return bitmap;
}
若需要详细的代码,请移步下载