首页 > 其他分享 >android RecyclerView 长按之后滑动手指多选

android RecyclerView 长按之后滑动手指多选

时间:2024-07-09 18:53:31浏览次数:15  
标签:rv viewHolder return 多选 viewUnder false android RecyclerView

关键函数与类

  • LinearLayoutManager.canScrollHorizontally()
  • LinearLayoutManager.canScrollVertically()
  • RecyclerView.OnItemTouchListener

核心代码

mCanRecyclerViewScroll = true;

recyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false) {
    @Override
    public boolean canScrollHorizontally() {
        return mCanRecyclerViewScroll && super.canScrollHorizontally();
    }

    @Override
    public boolean canScrollVertically() {
        return mCanRecyclerViewScroll && super.canScrollVertically();
    }
});

recyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
    boolean is_down = false;
    @Override
    public boolean onInterceptTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {
        // Touch with many fingers, don't handle
        if (e.getPointerCount() > 1) return false;

        switch (e.getAction()) {
            case MotionEvent.ACTION_DOWN:
                is_down = true;
                rv.postDelayed(()->{
                    if (!is_down) return;
                    mCanRecyclerViewScroll = false;
                    View viewUnder = rv.findChildViewUnder(e.getX(), e.getY());
                    if (viewUnder == null) return;
                    RecyclerView.ViewHolder viewHolder = rv.findContainingViewHolder(viewUnder);
                    if (viewHolder == null) return;
                    Rect rect = new Rect();
                    if (viewHolder.itemView.getGlobalVisibleRect(rect) && rect.contains((int)e.getRawX(), (int)e.getRawY())) {
                        viewHolder.itemView.setBackgroundColor(Color.CYAN);
                    }
                }, 500);
                break;
            case MotionEvent.ACTION_UP:
                is_down = false;
                break;
            case MotionEvent.ACTION_MOVE:
                return !mCanRecyclerViewScroll;
            default:
                break;
        }
        return false;
    }

    @Override
    public void onTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {
        View viewUnder = rv.findChildViewUnder(e.getX(), e.getY());
        if (viewUnder == null) return;
        RecyclerView.ViewHolder viewHolder = rv.findContainingViewHolder(viewUnder);
        if (viewHolder == null) return;
        Rect rect = new Rect();
        if (viewHolder.itemView.getGlobalVisibleRect(rect) && rect.contains((int)e.getRawX(), (int)e.getRawY())) {
            viewHolder.itemView.setBackgroundColor(Color.CYAN);
        }
    }

    @Override
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {}
});

参考链接

How to multi-select using drag gesture in RecyclerView ?

标签:rv,viewHolder,return,多选,viewUnder,false,android,RecyclerView
From: https://www.cnblogs.com/hangj/p/18292570

相关文章

  • Android 11 recovery恢复出厂设置保留某些文件
    /bootable/recovery/recovery.cpprecovery的注释,流程解释!/**Therecoverytoolcommunicateswiththemainsystemthrough/cachefiles.*/cache/recovery/command-INPUT-commandlinefortool,oneargperline*/cache/recovery/log-OUTPUT-combin......
  • 将android studio安装到D盘
    双击exe安装,勾选指定到D盘复选框为[不创建快捷方式],点击[Install]安装完成启动不导入设置不发送信息取消下一步自定义设置设置主题指定sdk下载位置下一步下一步同意开始下载下载完成点击查看详情Preparing"......
  • Android面试题之Activity的启动模式和flag
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点Activity中的几种启动模式activity的几种启动模式是android中常考的知识点,一般会考察有哪几种启动模式,以及每种启动模式在什么场景下使用:standard:这个是android......
  • Android |(六)基础控件10 RecycleView 滑动【进阶】
      RecyclerView是官方在5.0之后新添加的控件,推出用来替代传统的ListView和GridView列表控件。一、RecycleView(一)总:添加RecycleView控件(1)activity_main中(2)初始化 (3)setLayoutManager()listRv.setLayoutManager(newLinearLayoutManager(this));RecyclerView提供......
  • Android全局替换字体
    一、概述由于业务需要,各端之间统一字体(Android、IOS、PC、网页)。所以android也需要替换成特定的字体。以后有可能还会增加其他的字体。方案:使用LayoutInflaterCompat.setFactory2来全局替换字体。这样做的好处是可以一次性的替换大部分的字体。剩余的个性......
  • 纯小白uni-app+Android Studio离线打包
    一、HBulderX(1)cloud:开发者中心 注册登录(2)HBulderX登录开发者中心的账号,创建uni-app项目-》test,此时点击test下文件mainfest.json,会出现如下uni-app的AppID 同时在CLOUD上也会出现此项目,注意,项目名称和AppID要对上 (3)HBulderX本地打包 打包结果如下,期间要下什么插件,就让......
  • Android:如何绘制View
    点击查看Android如何绘制视图官网一、简介Android框架会在Activity获得焦点时请求Activity绘制其布局。Android框架会处理绘制流程,但该Activity必须提供其布局层次结构的根节点。Android框架会绘制布局的根节点,并测量和绘制布局树。它会通过遍历布局树并渲染......
  • Android 10.0 SystemUI启动流程
    1、手机开机后,Android系统首先会创建一个Zygote(核心进程)。2、由Zygote启动SystemServer。3、SystemServer会启动系统运行所需的众多核心服务和普通服务、以及一些应用及数据。例如:SystemUI启动就是从SystemServer里启动的。4、进入锁屏界面,开机完成。SystemServer中......
  • 晚上定时编译android系统
    1、问题可能偶然想晚上定时编译android系统2、解决at.sh#!/bin/sh#at-fat.shnow+1min#at-lset-eset-xecho$SHELLecho'atbuildbegin'/bin/date>>at_build.log/bin/bash-c'sourcebuild/envsetup.sh>>at_build.log2>&1;lu......
  • Android开发——使用Android Studio封装SDK(二) jar
    前言:什么叫SDK?  软件开发工具包(SoftwareDevelopmentKit,缩写SDK)一般是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。  Android常见的SDK有哪些形式?   (1).so库:是C或C++语言而打包成的库。   (2)......