ListView的侧滑demo

Android自定义ListView实现侧滑子菜单 惯例,先放效果图,DEMO在最后 想当年博主刚接触Android的时候,看到这个效果心中只有膜拜啊,如果慢慢的自己水平也上来了,就把当年的一个想法给圆满了吧。 好了,废话不多说,先总结总结这个效果: 首先是需要自定义ListView,这点是必须的,然后在ListView的onTouchEvent方法中对事件进行处理普通的Item的话,是没办法实现这样侧滑的,即使你塞一 阅读详情

https://github.com/kodulf/SwipeMenuListView


Add dependency

dependencies {
    compile 'com.baoyz.swipemenulistview:library:1.3.0'
}

Step 1

  • add SwipeMenuListView in layout xml
<com.baoyz.swipemenulistview.SwipeMenuListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />


package com.example.administrator.swipelistviewdemo;

import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.BounceInterpolator;
import android.widget.BaseAdapter;
import android.widget.TextView;
import android.widget.Toast;

import com.baoyz.swipemenulistview.SwipeMenu;
import com.baoyz.swipemenulistview.SwipeMenuCreator;
import com.baoyz.swipemenulistview.SwipeMenuItem;
import com.baoyz.swipemenulistview.SwipeMenuListView;

import java.util.ArrayList;
import java.util.logging.Handler;

public class MainActivity extends AppCompatActivity {

    private ArrayList<String> mData;
    private SwipeMenuListView mListView;
    private AppAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //listView的元素
        mData = new ArrayList<String>();
        for (int i = 0; i < 20; i++) {
            mData.add("item"+i);
        }

        //获取listView
        mListView = (SwipeMenuListView) findViewById(R.id.listView);
        //创建侧滑的菜单,一个是open 一个是删除
        SwipeMenuCreator creator = new SwipeMenuCreator() {

            @Override
            public void create(SwipeMenu menu) {
                // create "open" item
                SwipeMenuItem openItem = new SwipeMenuItem(
                        getApplicationContext());
                // set item background
                openItem.setBackground(new ColorDrawable(Color.rgb(0xC9, 0xC9,
                        0xCE)));
                // set item width
                openItem.setWidth(90);
                // set item title
                openItem.setTitle("Open");
                // set item title fontsize
                openItem.setTitleSize(18);
                // set item title font color
                openItem.setTitleColor(Color.WHITE);
                // add to menu
                menu.addMenuItem(openItem);

                // create "delete" item
                SwipeMenuItem deleteItem = new SwipeMenuItem(
                        getApplicationContext());
                // set item background
                deleteItem.setBackground(new ColorDrawable(Color.rgb(0xF9,
                        0x3F, 0x25)));
                // set item width
                deleteItem.setWidth(90);
                // set a icon
                deleteItem.setIcon(R.mipmap.ic_launcher);
                // add to menu
                menu.addMenuItem(deleteItem);
            }
        };

        // 将上面的creator设置给listView
        mListView.setMenuCreator(creator);

        //给侧滑的菜单 添加监听 当时第一个就是open,第二个就是delete的按钮
        mListView.setOnMenuItemClickListener(new SwipeMenuListView.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(final int position, SwipeMenu menu, int index) {
                switch (index) {
                    case 0:
                        // open
                        Toast.makeText(getApplicationContext(),"Hello Open !!",Toast.LENGTH_LONG).show();
                    case 1:
                        // delete,执行删除的操作
                        Toast.makeText(getApplicationContext(),"Hello Delete"+position,Toast.LENGTH_LONG).show();
                        for (int i = 0; i < mData.size(); i++) {
                            Log.d("kodulf",mData.get(i));
                        }
                        String remove = mData.remove(position);
                        Log.d("kodulf","移除了"+remove);
                        mAdapter.notifyDataSetChanged();
                        //返回
                        return true;
                }
                // false : close the menu; true : not close the menu
                return false;
            }
        });
        // 设置侧滑的方向,从左边开始向右的就是DIRECTION_LEFT
        mListView.setSwipeDirection(SwipeMenuListView.DIRECTION_LEFT);


        mAdapter = new AppAdapter();
        mListView.setAdapter(mAdapter);

        //关闭的动画
        mListView.setCloseInterpolator(new BounceInterpolator());

        //添加滑动的监听
        mListView.setOnSwipeListener(new SwipeMenuListView.OnSwipeListener() {

            @Override
            public void onSwipeStart(int position) {
                // swipe start
            }

            @Override
            public void onSwipeEnd(int position) {
                // swipe end
            }
        });
    }

    class AppAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return mData.size();
        }

        @Override
        public Object getItem(int i) {
            return mData.get(i);
        }

        @Override
        public long getItemId(int i) {
            return i;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            View inflate;
            //注意这里的复用的view 一定要使用,不然会出现,删除第8个,但是最后一个不见了的情况
            if(view==null) {
                inflate = LayoutInflater.from(getApplicationContext()).inflate(android.R.layout.simple_list_item_1, viewGroup, false);
            }else{
                inflate = view;
            }
            TextView text = (TextView)inflate.findViewById(android.R.id.text1);
            text.setText(mData.get(i)+"__________kodulf__________+++++++++++++++++++_____kodulf_________");
            text.setTextColor(Color.BLACK);
            return inflate;

        }
    }
}


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=

参考:

SwipeMenuListView

Android Arsenal Download

A swipe menu for ListView.

Demo

Screenshot

Usage

Add dependency

dependencies {
    compile 'com.baoyz.swipemenulistview:library:1.3.0'
}

Step 1

  • add SwipeMenuListView in layout xml
<com.baoyz.swipemenulistview.SwipeMenuListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

Step 2

  • create a SwipeMenuCreator to add items.
SwipeMenuCreator creator = new SwipeMenuCreator() {

    @Override
    public void create(SwipeMenu menu) {
        // create "open" item
        SwipeMenuItem openItem = new SwipeMenuItem(
                getApplicationContext());
        // set item background
        openItem.setBackground(new ColorDrawable(Color.rgb(0xC9, 0xC9,
                0xCE)));
        // set item width
        openItem.setWidth(dp2px(90));
        // set item title
        openItem.setTitle("Open");
        // set item title fontsize
        openItem.setTitleSize(18);
        // set item title font color
        openItem.setTitleColor(Color.WHITE);
        // add to menu
        menu.addMenuItem(openItem);

        // create "delete" item
        SwipeMenuItem deleteItem = new SwipeMenuItem(
                getApplicationContext());
        // set item background
        deleteItem.setBackground(new ColorDrawable(Color.rgb(0xF9,
                0x3F, 0x25)));
        // set item width
        deleteItem.setWidth(dp2px(90));
        // set a icon
        deleteItem.setIcon(R.drawable.ic_delete);
        // add to menu
        menu.addMenuItem(deleteItem);
    }
};

// set creator
listView.setMenuCreator(creator);

Step 3

  • listener item click event
listView.setOnMenuItemClickListener(new OnMenuItemClickListener() {
    @Override
    public boolean onMenuItemClick(int position, SwipeMenu menu, int index) {
        switch (index) {
        case 0:
            // open
            break;
        case 1:
            // delete
            break;
        }
        // false : close the menu; true : not close the menu
        return false;
    }
});

Swipe directions

    // Right
    mListView.setSwipeDirection(SwipeMenuListView.DIRECTION_RIGHT);

    // Left
    mListView.setSwipeDirection(SwipeMenuListView.DIRECTION_LEFT);

Create Different Menu

  • Use the ViewType of adapter
    class AppAdapter extends BaseAdapter {

        ...

        @Override
        public int getViewTypeCount() {
            // menu type count
            return 2;
        }

        @Override
        public int getItemViewType(int position) {
            // current menu type
            return type;
        }

        ...
    }
  • Create different menus depending on the view type
    SwipeMenuCreator creator = new SwipeMenuCreator() {

            @Override
            public void create(SwipeMenu menu) {
                // Create different menus depending on the view type
                switch (menu.getViewType()) {
                case 0:
                    // create menu of type 0
                    break;
                case 1:
                    // create menu of type 1
                    break;
                ...
                }
            }

        };
  • Demo

Screenshot

Other

  • OnSwipeListener
listView.setOnSwipeListener(new OnSwipeListener() {

    @Override
    public void onSwipeStart(int position) {
        // swipe start
    }

    @Override
    public void onSwipeEnd(int position) {
        // swipe end
    }
});
  • open menu method for SwipeMenuListView
listView.smoothOpenMenu(position);
  • Open/Close Animation Interpolator
// Close Interpolator
listView.setCloseInterpolator(new BounceInterpolator());
// Open Interpolator
listView.setOpenInterpolator(...);

Screenshot



Androidlistview侧滑删除第三方库实现方法 立即下载

相关推荐

listview 向左滑动删除

1、实现listview item向左滑动 2、滑动超出一定范围,显示删除按钮 3、具体看代码注释

Android 重写Listview实现左滑删除功能( 非常好用 )

做一个笔记:Listview左滑删除功能,demon地址:https://download.youkuaiyun.com/download/qq_33749262/12634812。 1 . 重写ListView -> ListViewCompat 重写了onTouchEvent,当ACTION_DOWN时通过pointToPosition(x, y)找到当前touch的是哪一个item,然后通过data.slideView找到对应的 slideView,并且回调slideView的onRequireTouc

qq_33749262的博客 1202

左右侧滑的实现demo

需要导入slidingmenu 导入后直接可以使用 左右侧滑的实现demo

android listview左右滑动,Android左右滑屏遇到listview问题解决

今天要实现一个左右滑屏的功能,且滑屏中要装载 listview,当单滑屏时冇有问题,当加载listview 后发现 左右滑屏不能 发现需要 修改 触摸事件分派。在当前加载滑屏和listview 的Activity 中为左右滑屏控件(我用viewgroup) 添加分派。public boolean dispatchTouchEvent(MotionEvent ev){this.mScrollLayo...

weixin_42222065的博客 623

android listview 实现左滑删除置顶

android listview 实现左滑删除置顶

侧滑菜单Demo

这是我在学习ios的过程中写的一个demo,使用手势识别器实现了侧滑菜单功能

Listview侧滑删除(仿QQ侧滑删除)

前几天在某论坛看到一个Listview侧滑demo,感觉不错,于是下载了下来,但是发现不是很完美,有一些BUG,而且只能删除,于是本人在原作者基础上修改了一番,修复了一些BUG和扩展了一下。 下面先上效果图:

GHT199266的博客 861

Android ListView Item左滑删除粒子散开效果 源码

ParticleLayout左滑粒子效果,滑动删除某条item的有没,自定义ParticleLayout然后对其设置 监听setDeleteListener,提供onDelete()方法,自定义view的onTouchEvent()当滑动的时候对 view做一些动画处理效果。

Android ListView侧滑item,仿QQ删除效果

最近的项目需求有一条是要实现仿QQ的侧滑删除效果,网上搜到了很多,但是与预想的都不太一样,于是自己研究了一下,写了一个Demo,记录下来。 功能: 1.实现了仿QQ的Item侧滑效果 2.可根据item的长度计算侧滑范围 3.实现item条目点击监听与删除按钮监听 4.解决了删除按钮出现时ListView滑动错位问题(偷懒:滑动时item复位) 主要代码: SlidePa

aoshiwenrou的专栏 3006

详解Android中实现ListView左右滑动删除条目的方法

使用Scroller实现绚丽的ListView左右滑动删除Item效果 这里来给大家带来使用Scroller的小例子,同时也能用来帮助初步解除的读者更加熟悉的掌握Scroller的使用,掌握好了Scroller的使用我们就能实现很多滑动的效果。例如侧滑菜单,launcher,ListView的下拉刷新等等效果,我今天实现的是ListView的item的左右滑动删除item的效果,现在很多朋友看到这个效果应该是在Android的通知栏下拉中看到这个滑动删除的效果吧,我看到这个效果是在我之前的三星手机上左右滑动打电话发短信的效果,感觉很棒,不过现在很多手机联系人滑动都不是我之前那台手机的效果啦,网

Android实现ListView左右滑动删除和编辑

有时候,为了实现项目中的需求,完成设计好的用户交互体验,不的不把这些View重新改造成自己想要的效果。 Android原生的ListView是不支持左右滑动的,但是看到微信电话本上,联系人可以左右滑动进行操作的,就通过自己的设想和思路,并加以实现了。 思路: 1.获取到手指放到屏幕时的x,y位置,并判断点击的处于ListView的那个position。 2.判断滑动的方向,如果是上下方向,touch事件就交给ListView处理;如果是左右方向,就禁止ListView进行滑动。 3.根据手指的移动,来移动选中的View。 4.滑动结束后,把View归位。 5.通过传入的监听器,告诉用

Android 下拉刷新上拉加载 多种应用场景 超级大放送(上)

关于Android下拉刷新上拉加载,网上的Demo太多太多了,这里不是介绍怎么去实现下拉刷新上拉加载,而是针对下拉刷新上拉加载常用的一些应用场景就行了一些总结,包含了下拉刷新上拉加载过程中遇到的一些手势冲突问题的解决方法(只能算是抛砖引玉)。Demo中包含的一些主要的知识点:View和ViewGroup的事件分发机制,DrawerLayout侧滑菜单,SwipeListView滑动删除,瀑布流照片墙效果,图片轮播,PagerSlidingTabStrip,TabLayout,VewPager等的使用方法在D

yalinfendou的专栏 5105

【Audio driver】深入解析mixer_paths.xml中的音频通路配置

本文深入解析了Android音频驱动开发中的核心配置文件mixer_paths.xml。文章以高通平台为例,详细阐述了音频通路(FE、BE、DSP、Device)的概念与连接逻辑,并通过实战案例拆解了扬声器与麦克风通路的配置方法、关键控件作用及调试技巧,是理解与定制Android音频系统的实用指南。

ik6789012的博客 357

listview+Fragment特效Demo

左边List点击之后对应右边的Fragment!

584

Ubuntu22.04+Docker一键部署Autoware Universe避坑指南(附鱼香ROS配置)

本文详细介绍了在Ubuntu22.04系统中使用Docker一键部署Autoware Universe的完整流程,包括鱼香ROS工具链配置、Docker环境优化及VSCode开发环境集成。通过实战指南帮助开发者快速搭建自动驾驶开发环境,解决常见部署问题,提升开发效率。

weixin_29254673的博客 413

告别JSON!Anthropic发布Tool Calling 2.0,Agent上下文消耗骤降80%

Anthropic发布ToolCalling 2.0更新,彻底革新AI Agent开发模式。四大核心特性:1)程序化工具调用,允许模型直接输出可执行代码替代JSON交互,降低30-50%Token消耗;2)动态网页过滤,自动清洗网页内容减少24%无效信息;3)工具搜索机制,按需加载工具定义,最高优化80%上下文窗口;4)工具使用示例,通过Few-Shot示范提升复杂表单处理准确率至90%。这一升级将Agent范式从"大模型作为路由"推进到"大模型作为引擎",但需注意代

老孙 | Ethan Sun 的博客:AI 智能体与 AI 原生软件的工程实践 794

listview 侧滑删除(-)单独的侧滑删除

以前我也在网上用过别人写的侧滑删除,但是总是不那么顺畅,而且各种冲突,比如跟onitemclick点击事件,listview本身的滑动事件,还有下拉刷新的事件等等……所以现在自己写了个侧滑删除,用的是scroller,算是没有什么冲突吧,但是要和下拉刷新完美兼容,还得在下拉刷新里做些处理,这次我先给大家介绍单独地demo,下一篇再将侧滑删除和下拉刷新以及上拉自动加载全部整合起来。效果图: 主要代码

feiyang877647044的博客 520

基于 SpringAI 整合 DeepSeek 模型实现 AI 聊天对话

很多云平台都提供了一键部署大模型的功能,这里不再赘述(阿里云百炼平台、火山方舟-火山引擎等)Ollama。

📜一个热爱探索的人 1277

QQ视差特效和ListView侧滑删除

如图所示是效果图,当向下拉时,图片会被拉出来,松手后恢复。和ListView的侧滑删除 1.视差特效 首先图片是通过addHeaderView加上去的,所以在设置Adapter前先设置一个View来作为头布局,图片的设置android:scaleType="centerCrop" 然后可以重写ListView主要是用通过overScrollBy来实现图...

alf13610的博客 166

使用Jacob实现将Word文件转换为Pdf文件

如果是首次使用 jacob,建议先直接从 github上下载 zip包,因为在实现Word转Pdf的时候,不仅需要用到 jacob.jar,还需要 jacob.dll 库,而zip包中都有。官方使用文档可以参考:https://github.com/freemansoft/jacob-project/blob/main/docs/UsingJacob.md。// 如果安装的是微软的 Office,需要使用 Word.Application。

qq_41672950的博客 750

数字IC设计(8)之AHB-Lite总线(持续更新)

AHB总线全称Advanced High-performance Bus,意为先进高性能总线。推出该总线的目的是补充APB总线在性能上的不足,APB总线适合挂载低速外设,所以AHB总线用来挂载高性能的外设,这样子可以分工合作,节约资源。AHB总线可以实现多主多从的连接,此时需要设计仲裁机和matrix(矩阵),AHB-Lite一般用于一主多从,此时则不需要仲裁机和matrix,但是也可以用AHB-Lite来实现多主多从,就是设计多个layer,每个layer是一主多从,再把各个layer连起来;

qq_69440734的博客 2255

侧滑ListView

package com.example.thridlogin_demo; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration;

此季流火 583

基于深度学习YOLOv8的PCB板缺陷检测系统

基于YOLOv8的PCB板缺陷检测系统,可以有效提高PCB生产过程中的检测效率。未来,我们可以进一步优化模型,结合更多的数据增强策略和先进的网络结构,以适应更复杂的生产环境。为了进行训练,理想的数据集应包含多种不同缺陷类型和不同背景的PCB图像。YOLOv8需要的数据格式为每个图像一个标签文件,每个标签文件包含缺陷的类别及其边界框坐标。运行该界面时,用户可以通过点击按钮选择图像,随后系统将自动检测图像中的PCB缺陷并显示结果。训练完成后,可以使用训练好的模型进行推理,检测新的PCB图像中的缺陷。

YOLO 1070

android ListView的item侧滑删除

转载地址:https://blog.youkuaiyun.com/zxc123e/article/details/54585609 Demo下载地址:https://download.youkuaiyun.com/download/as425017946/10633657 首先看一下效果图,有个直观认识   主要功能就是ListView的item可以侧滑,出来一个删除按钮,点击delete就删除该item。 这是一...

杰森丶郭达斯坦森的博客 2647

ruoyi-nbcio-plus基于vue3的flowable服务任务的升级修改

ruoyi-nbcio-plus基于vue3的flowable服务任务的升级修改

宁波阿成的博客 847

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ListView和RecyclerView侧滑菜单

仿QQ侧滑(实现的效果跟QQ侧滑菜单一样) 侧滑菜单这个功能出来很久了,网上也有很多开源框架,本身也没啥写的,写这个玩意还是源于一个同行网友,他说找不到ListView的侧滑菜单,我说现在大家都用RecycleView了,你用啥ListView,他说经理要求的,好吧,经理大,只好抽时间帮他写了个……

会飞的鱼~的博客 3620

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

上一篇: c语言结构第一部分
下一篇: c语言中 结构变量,结构类型标示,结构类型定义的区别
千雅爸爸
博客等级 码龄18年 292粉丝 639原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值