Android DragVideo实现播放视频时任意拖拽的方法

Android DragVideo实现播放视频时任意拖拽的方法,第1张

概述AndroidDragVideo实现播放视频时任意拖拽DragVideoAMethodtoDragtheVideoWhenPlayingVideo一种在播放视频时,能够拖拽的方案

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.jb51.net/201612/yuanma/DragVideo-master(jb51.net).rar

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

总结

以上是内存溢出为你收集整理的Android DragVideo实现播放视频时任意拖拽的方法全部内容,希望文章能够帮你解决Android DragVideo实现播放视频时任意拖拽的方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1147502.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存