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

版权所有,禁止匿名转载;禁止商业使用。

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

swipemenulistview,左右滑动


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

swipemenulistview,左右滑动

0 0