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

  今天从网上找到一个第三方控件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中添加我们需要跳转的方法即可。然后我们就实现了列表的左右滑动

时间: 2024-10-13 09:11:49

使用swipemenulistview实现列表的左右滑动的相关文章

WP8_GestureListener实现列表向下滑动加载新数据

利用GestureListener的OnDragCompleted事件,实现列表向下滑动时,加载新的数据: (不建议使用 Touch.FrameReported+=Touch_FrameReported; 此事件是全局的,如果没有注销事件,在离开页面后仍会得到响应,而这不是希望的效果) 前台代码: <Border> <!- 此处放置ScrollViewer或 ListBox--> <ScrollViewer/>   <toolkit:GestureService.

QQ好友列表向左滑动出现置顶、删除--第三方开源--SwipeMenuListView

SwipeMenuListView是在github上的第三方开源项目,该项目在github上的链接地址是:https://github.com/baoyongzhang/SwipeMenuListView . 下载后直接将项目包复制粘贴到需要的项目当中: 测试代码: item.xml: 1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="htt

用ionic做的列表向左滑动,出现删除等功能按钮

废话不多说,直接上代码 html代码: <!--列表--><ul class="lists" ng-repeat="list in lists"> <ion-list> <ion-item> <!--这是列表--> <li class="ub ub-ac" ng-click="goApplyDetail(list.keyid)" > <div cla

SwipeMenuListView在ScrollView里上下滑动导致菜单不能显示完全的bug解决方法

这是因为上下滑动的时候,事件被ScrollView截获了,这时候应该禁止ScrollView截获上下滑动事件,解决方法如下 public class NoRollSwipeMenuListView extends SwipeMenuListView { private GestureDetector mGestureDetector; public NoRollSwipeMenuListView(Context context) { super(context); mGestureDetecto

监听列表ListVIew的滑动状态

/*监听列表的滑动状态:暂时用不到 * SCROLL_STATE_FLING 时让图片不显示,提高滚动性能让滚动小姑更平滑 * SCROLL_STATE_IDLE 时显示当前屏幕可见的图片*/ mListView.setOnScrollListener(new OnScrollListener() { //滑动的状态变化 public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollStat

[UI列表]LoopScrollRect无限滑动不卡顿

应用场景 对于背包界面,排行榜列表,聊天消息,等有大量的UI列表的界面,常规做法是为每一条数据生成一个格子,在数据量越大的情况下,会生成越来越多的Gameobject,引起卡顿. 这篇文章讲述的就是解决UI列表卡顿的方法,在列表中只生成指定数量的Gameobject,滑动时进行数据更新,保证性能. LoopScrollRect(无限滑动不卡顿) 插件地址:https://github.com/qiankanglai/LoopScrollRect 中文文档:http://qiankanglai.m

Android仿qq下拉刷新及向左滑动列表----PullToRefresh, SwipeMenuListView开源项目整合

Github链接:https://github.com/licaomeng/Android-PullToRefresh-SwipeMenuListView-Sample PullToRefresh是一个非常完美的下拉刷新的开源项目,SwipeMenuListView是一个向左滑动ListView中item实现可以删除功能的开源项目.笔者在此将两套开源项目整合形成一套,类似于手机qq那样同时支持下拉刷新和向左滑动的列表.效果如下: 版权声明:本文为博主原创文章,未经博主允许不得转载.

WP8_区分滑动和点击(在图片列表中)

在windows phone中,对于一个页面中 有图片列表的,滑动的时候,很容易被误认为是点击了图片,而打开图片详细信息等,原意是滑动列表,由此对图片添加2个事件,来控制其点击行为(滑动的时候,基本不会执行到do clicked something处)   private bool _isClickEnable = false; private DateTime _clickedTime;   private void Img1_OnMouseLeftButtonDown(object send

UGUI 列表控件 : Vertical Layout Group (垂直列表)

Spacing 表示 每个 Item 之间的距离. Child Alignment 表示对齐方式. Child Force Expand 表示 自适应 宽 和高 使用了 列表之后 ,它的每一个子物体都不能设置 Rect Transform ,如图 可以使用 Layout Element Ignore Layout : 为了不计算隐藏的cell 所以要先把 IngonreLaytout = true 再 setActivity = false  这一切都可以在代码里面来设置. Min Width