返回顶部
首页 > 资讯 > 移动开发 >Android视频播放左右滑动进度与RecyclerView左右滑动起冲突
  • 550
分享到

Android视频播放左右滑动进度与RecyclerView左右滑动起冲突

recyclerviewAndroid 2022-06-06 13:06:44 550人浏览 独家记忆
摘要

一、问题描述 最近在开发的项目中有一个左滑右滑浏览照片和视频的模块,然后滑动到视频的时候点击可以播放,播放器用的是饺子播放器 jiaozivid

一、问题描述

最近在开发项目中有一个左滑右滑浏览照片和视频的模块,然后滑动到视频的时候点击可以播放,播放器用的是饺子播放器 jiaozivideoplayer 的GitHub地址,项目需求是点击播放的时候可以左右滑动进行快进 / 快退,但是滑动只是切换下一个,不能改变进度,很明显是和 RecyclerView 起了滑动冲突了,这个问题困扰了我很久,下面分享一下我的解决办法,先看看效果吧:

在这里插入图片描述

二、触摸事件拦截

首先对父View的触摸事件进行拦截 onInterceptTouchEvent(),这里需要注意的是ACTioN_DOWN 不能拦截,我这里是根据播放状态 isPlay 返回当前是否拦截滑动事件

   recyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
                        @Override
                        public boolean onInterceptTouchEvent(@NonNull RecyclerView recyclerView, @NonNull MotionEvent motionEvent) {
                            if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
                                XYLogger.INSTANCE.d(TAG, "onInterceptTouchEvent: 1");
                                return false;
                            } else {
                                if (isPlay) {
                                    XYLogger.INSTANCE.d(TAG, "onInterceptTouchEvent: 2");
                                    return true;
                                } else {
                                    XYLogger.INSTANCE.d(TAG, "onInterceptTouchEvent: 3");
                                    return false;
                                }
                            }
                        }
                        @Override
                        public void onTouchEvent(@NonNull RecyclerView recyclerView, @NonNull MotionEvent motionEvent) {
                        }
                        @Override
                        public void onRequestDisallowInterceptTouchEvent(boolean b) {
                        }
                    });

这样处理就完了吗?没有,RecycleView 相当于父 View ,父 VIew 的触摸事件被拦截了,子 View 的触摸事件是接收不到的,至于为什么这样可以看一下View的事件的传递,所以我们需要在子 View 的dispatchTouchEvent处理一下,告诉 父 VIew 不要拦截 子View的事件

 getParent().requestDisallowInterceptTouchEvent(true);
 public boolean dispatchTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                getParent().requestDisallowInterceptTouchEvent(true);
                break;
            case MotionEvent.ACTION_MOVE:
                    if (isPlaying){
                        //正在播放中
                        Log.d(TAG, "dispatchTouchEvent: 正在播放中");
                        getParent().requestDisallowInterceptTouchEvent(true);
                    }else {
                        Log.d(TAG, "dispatchTouchEvent: 播放已暂停");
                        getParent().requestDisallowInterceptTouchEvent(false);
                    }
                break;
            case MotionEvent.ACTION_UP:
                break;
            default:
                break;
        }
        //这里不能返回false
        return super.dispatchTouchEvent(ev);
    }

这样已处理的话,就可以达到播放视频的时候把父 View 的滑动事件禁止掉,若大家发现有什么问题,欢迎指正。


作者:BigBigManLx


--结束END--

本文标题: Android视频播放左右滑动进度与RecyclerView左右滑动起冲突

本文链接: https://lsjlt.com/news/28993.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作