今天从网上找到一个第三方控件swipemenulistview,封装好的一个控件,可以实现列表的左右滑动,模仿qq的列表效果
下载地址为: https://github.com/baoyongzhang/SwipeMenuListView
我们下载好之后,将这个项目导入到我们的工程当中去,
我个人感觉比较重要的是SwipeMenuLayout这个类,在这个类当中重写了好多方法,才能实现我们列表选项的左右滑动。
@Override public void computeScroll() { if (state == STATE_OPEN) { if (mOpenScroller.computeScrollOffset()) {// 要是没有滚动完 就启动滚动的动画 swipe(mOpenScroller.getCurrX()); postInvalidate();// //必须调用该方法,否则不一定能看到滚动效果 } } else { if (mCloseScroller.computeScrollOffset()) { swipe(mBaseX - mCloseScroller.getCurrX()); postInvalidate(); } } } public void smoothCloseMenu() { state = STATE_CLOSE;// mBaseX = -mContentView.getLeft();// mCloseScroller.startScroll(0, 0, mBaseX, 0, 350);// 滚动的final位置 postInvalidate(); } // //////////////////////////////////////////// // 创建open动画 public void smoothOpenMenu() { state = STATE_OPEN; mOpenScroller.startScroll(-mContentView.getLeft(), 0, mMenuView.getWidth(), 0, 350); postInvalidate(); } // 创建close动画 public void closeMenu() { if (mCloseScroller.computeScrollOffset()) { mCloseScroller.abortAnimation(); } if (state == STATE_OPEN) { state = STATE_CLOSE; swipe(0); } } public void openMenu() { if (state == STATE_CLOSE) { state = STATE_OPEN; swipe(mMenuView.getWidth()); } }
这只是部分比较重要的代码, 在我们工程中,我们如何去调用它
private void InitcehuaListView(View view) {// 初始化 listView = (SwipeMenuListView) view.findViewById(R.id.listView); // /////////////////////////////////////////////////////////////////// // 这个是创建了一个滑动菜单的的listview SwipeMenuCreator creator = new SwipeMenuCreator() { @Override public void create(SwipeMenu menu) { ListViewMenuCreate(menu); } }; // set creator listView.setMenuCreator(creator);// listview要添加menu }
我们在创建的时候跳转到我们的ListViewMenuCreate这个方法
// 值得注意的是 每一个listview的item创建的时候 SwipeMenu就创建了一次 private void ListViewMenuCreate(SwipeMenu menu) { SwipeMenuItem kankanItem = new SwipeMenuItem(getActivity() .getApplicationContext()); // set item background kankanItem.setBackground(new ColorDrawable(Color.rgb(0x33, 0x66, 0xcc)));// 设置背景颜色 // set item width // kankanItem.setWidth(dp2px(60));// 设置宽度 kankanItem.setWidth(SyllabusMethod .dp2px(60, getResources())); // set item title kankanItem.setTitle("添加");// 设置第一个标题 // set item title fontsize kankanItem.setTitleSize(18);// 设置标题文字的大小 // set item title font color kankanItem.setTitleColor(Color.WHITE);// 设置标题颜色 // add to menu menu.addMenuItem(kankanItem);// 添加标题到menu类中 SwipeMenuItem showItem = new SwipeMenuItem(getActivity() .getApplicationContext()); // set item background showItem.setBackground(new ColorDrawable(Color.rgb(0xC9, 0xC9, 0xCE)));// 设置背景颜色 // set item width // showItem.setWidth(dp2px(60));// 设置宽度 showItem.setWidth(SyllabusMethod.dp2px(60, getResources())); // set item title showItem.setTitle("删除");// 设置第一个标题 // set item title fontsize showItem.setTitleSize(18);// 设置标题文字的大小 // set item title font color showItem.setTitleColor(Color.WHITE);// 设置标题颜色 // add to menu menu.addMenuItem(showItem);// 添加标题到menu类中 }
我们将item加入到我们的menu中来,然后我们再去设置我们item的点击事件
listView.setOnMenuItemClickListener(new OnMenuItemClickListener() { public void onMenuItemClick(int position, SwipeMenu menu, int index) { ListmenuTimes = -1; String value = menu.getMenuItem(index).getTitle().toString(); if (value.equals("添加")) { appliction.setCurrentchickpos(position + 1); Intent addkchengintent = new Intent(getActivity(), AddsyllabusActivity.class); startActivityForResult(addkchengintent, CommonCS.INTENT_GOTO_ADDSYLLABUS_CODE); } else if (value.equals("删除")) { boolean flag = SomeSqliteMethod.deleteCurrentItem( getActivity(), appliction.getCurrentdate(), (position + 1)); if (flag) { Toast.makeText(getActivity().getApplicationContext(), "删除成功", Toast.LENGTH_SHORT).show(); if (!Todaysyllabuslist.isEmpty()) { Todaysyllabuslist.clear(); } int currentdate = appliction.getCurrentdate(); InitMYTodayListData(currentdate); showlist(); } }
我们在相应的value中添加我们需要跳转的方法即可。然后我们就实现了列表的左右滑动