Android DragVideo实现播放视频时任意拖拽的方法
发布时间 - 2026-01-10 21:51:41 点击率:次Android DragVideo实现播放视频时任意拖拽

DragVideo
A Method to Drag the Video When Playing Video
一种在播放视频时,能够拖拽的方案
为什么有这个工程
经常在爱奇艺网站上看电影,看到如果滑动掩盖了播放窗口后,就后在最下面有一个小播放界面。并且这个播放界面,是可以任意拖拽的。感觉很酷
既然web端能实现,就想了想在移动端设备上,是否也能实现这个效果,于是就有了…
效果图:
——————>
实现思路:1、播放视频的view选择TextureView
2、ListView下方盖上自定义ViewDragHelper,当在播放视频时,通过自定义ViewDragHelper进行拖动TextureView
3、进行渐变处理,让两个view的文字能够交替显示
4、当TextureView到达右下方时,控制在水平方向上拖动,到达左边界时,如果再滑动,就销毁TextureView代码分析:
关于ViewDragHelper要注意如下几点:
1.ViewDragHelper.Callback是连接ViewDragHelper与view之间的桥梁(这个view一般是指拥子view的容器即parentView)。
2.ViewDragHelper的实例是通过静态工厂方法创建的;你能够指定拖动的方向;ViewDragHelper可以检测到是否触及到边缘;
3.ViewDragHelper并不是直接作用于要被拖动的View,而是使其控制的视图容器中的子View可以被拖动,如果要指定某个子view的行为,需要在Callback中想办法;
4.ViewDragHelper的本质其实是分析onInterceptTouchEvent和onTouchEvent的MotionEvent参数,然后根据分析的结果去改变一个容器中被拖动子View的位置( 通过offsetTopAndBottom(int offset)和offsetLeftAndRight(int offset)方法 ),他能在触摸的时候判断当前拖动的是哪个子View;
5.虽然ViewDragHelper的实例方法.ViewDragHelper create(ViewGroup forParent, Callback cb) 可以指定一个被ViewDragHelper处理拖动事件的对象,但ViewDragHelper类的设计决定了其适用于被包含在一个自定义ViewGroup之中,而不是对任意一个布局上的视图容器使用ViewDragHelper。
1.自定义的CustomViewDragHelper的初始化
ViewDragHelper一般用在一个自定义ViewGroup的内部,比如下面自定义了一个直接继承于ViewGroup的类DragvideoView,DragvideoView内部有一个mDragHelper作为成员变量:
创建一个带有回调接口的ViewDragHelper,这里是用MyHelperCallback,这些都是一些基本使用方法
拖动行为的处理已在注释中给出
当在MainActivity调用ViewDragHelper的setCallback方法时,以上回调就能作用了。当点击节目列表页(第一个显示listview的界面)的item时,调用playVideo()方法,方面内部通过DragVideoView.show方法,就开始显示DragVideoView。这时视频开始播放起来,并且,我们也可以对其进行拖拽了。
那么在拖动的过程中,我们要在DragVideoView中重写onTouchEvent方法,如下
以上方法最后,我们调用了,mDragHelper.processTouchEvent(event);也就是我们自定义的CustomViewDragHelper类,这个方法没有改动,就是ViewDragHelper的processTouchEvent方法。
总结下这个方法
在processTouchEvent中对ACTION_DOWN、ACTION_MOVE和ACTION_UP事件进行了处理:
1.在ACTION_DOWN中调用回调接口中的tryCaptureView方法,看当前touch的view是否允许拖动
2.在ACTION_MOVE中,view的坐标发生改变,调用回调接口中的onViewPositionChanged方法,根据坐标信息对view进行layout,通过ViewHelper这个类中的setScaleX、setScaleY方法,实现在拖动的过程中view在XY坐标上进行相应比例的缩放;
3.在ACTION_UP后调用回调接口中的onViewReleased方法,此方法中一个重要的任务是在ACTION_UP事件后,实现view的自动滑动,这里主要是使用了ViewDragHelper中smoothSlideViewTo方法
接着到达forceSettleCapturedViewAt方法
上面start了ViewDragHelper中的mScroller,在滑动过程中,通过重写computeScroll方法,可用用ViewCompat.postInvalidateOnAnimation(this)方法重绘view
最后由于拖拽过程中的显示视频的TextureView会不断变化,通过设置TextureView.SurfaceTextureListener,来监听当前TextureView的变化过程。
项目下载地址:http://xiazai./201612/yuanma/DragVideo-master().rar
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Android
# DragVideo
# DragVideo视频任意拖拽实现代码
# DragVideo实现播放视频时任意拖拽实现方案
# android使用surfaceview+MediaPlayer播放视频
# Android ViewPager中显示图片与播放视频的填坑记录
# Android中使用TextureView播放视频
# Android编程实现播放视频时切换全屏并隐藏状态栏的方法
# Android仿搜狐视频、微视等列表播放视频功能
# Android编程实现播放视频的方法示例
# Android多媒体教程之播放视频的四种方法
# Android 播放视频常见问题小结
# Android仿新浪微博/QQ空间滑动自动播放视频功能
# android surfaceView实现播放视频功能
# 拖动
# 自定义
# 回调
# 拖拽
# 过程中
# 重写
# 标上
# 有一个
# 的是
# 是在
# 第一个
# 就能
# 下载地址
# 是指
# 也能
# 适用于
# 要在
# 也可
# 能在
# 要注意
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
高端建站如何打造兼具美学与转化的品牌官网?
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
详解jQuery中的事件
移动端脚本框架Hammer.js
浅析上传头像示例及其注意事项
如何快速选择适合个人网站的云服务器配置?
如何快速生成凡客建站的专业级图册?
Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】
详解jQuery中基本的动画方法
Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决
深入理解Android中的xmlns:tools属性
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音
Android利用动画实现背景逐渐变暗
高防服务器如何保障网站安全无虞?
无锡营销型网站制作公司,无锡网选车牌流程?
Laravel怎么清理缓存_Laravel optimize clear命令详解
Laravel如何实现多对多模型关联?(Eloquent教程)
Laravel如何优化应用性能?(缓存和优化命令)
Laravel如何使用Service Container和依赖注入?(代码示例)
如何用美橙互联一键搭建多站合一网站?
怎么用AI帮你为初创公司进行市场定位分析?
如何为不同团队 ID 动态生成多个非值班状态按钮
如何彻底删除建站之星生成的Banner?
如何快速使用云服务器搭建个人网站?
Laravel怎么实现验证码(Captcha)功能
米侠浏览器网页背景异常怎么办 米侠显示修复
Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践
网站制作企业,网站的banner和导航栏是指什么?
如何在阿里云虚拟主机上快速搭建个人网站?
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
LinuxShell函数封装方法_脚本复用设计思路【教程】
JavaScript如何实现错误处理_try...catch如何捕获异常?
如何获取上海专业网站定制建站电话?
java获取注册ip实例
Laravel怎么判断请求类型_Laravel Request isMethod用法
Python正则表达式进阶教程_复杂匹配与分组替换解析
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
Laravel怎么在Controller之外的地方验证数据
详解阿里云nginx服务器多站点的配置
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
Laravel如何使用withoutEvents方法临时禁用模型事件
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
深圳网站制作的公司有哪些,dido官方网站?
,在苏州找工作,上哪个网站比较好?
如何在宝塔面板创建新站点?

