使用swipemenulistview实现列表的左右滑动

jopen 9年前

今天从网上找到一个第三方控件swipemenulistview,封装好的一个控件,可以实现列表的左右滑动,模仿qq的列表效果

使用swipemenulistview实现列表的左右滑动

下载地址为:https://github.com/baoyongzhang/SwipeMenuListView

我们下载好之后,将这个项目导入到我们的工程当中去,

使用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中添加我们需要跳转的方法即可。然后我们就实现了列表的左右滑动

使用swipemenulistview实现列表的左右滑动