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

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

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

时间: 2024-10-02 08:53:59

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

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

Android DragVideo实现播放视频时任意拖拽 DragVideo A Method to Drag the Video When Playing Video 一种在播放视频时,能够拖拽的方案 为什么有这个工程 经常在爱奇艺网站上看电影,看到如果滑动掩盖了播放窗口后,就后在最下面有一个小播放界面.并且这个播放界面,是可以任意拖拽的.感觉很酷 既然web端能实现,就想了想在移动端设备上,是否也能实现这个效果,于是就有了- 效果图: ------> 实现思路:1.播放视频的view选择Te

在android中用surfaceview播放视频时,实现未播放的预览效果?

问题描述 在android中用surfaceview播放视频时,实现未播放的预览效果? 在android中用surfaceview播放视频时,如何在surfaceview的出现时就加载视频的第一帧,实现未播放的预览效果? 类似于图的那种效果,谁有什么解决方法吗? 解决方案 http://download.csdn.net/detail/ohbxiaoxin/8320741 两个控件叠加,至于预览的图片,需要事先从视频中提取出来.

Android编程实现播放视频时切换全屏并隐藏状态栏的方法

本文实例讲述了Android编程实现播放视频时切换全屏并隐藏状态栏的方法.分享给大家供大家参考,具体如下: 1. Demo示例: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (this.getResources().getConfiguration().ori

win2003系统播放视频时画面差没有声音的解决方法

升级win 2003后发现播放视频时画面差,没有声音.本文整理了视频功能优化方面的技巧让win 2003系统更加完美,遇到类似问题的朋友可以参考下 选择系统,第一个选择的是它的稳定性,相对来说win 2003比win xp来得稳定,所以很多用户就选择了升级win 2003,但是升级完后发现播放视频时画面差,没有声音.没关系,今天小编就来教教大家把视频功能优化起来,让win 2003系统更加完美. 由于win 2003特别的设置,会特意屏蔽一些多媒体的功能来定位服务器应用,所以这问题很常见. 1.

android4.4以上系统webview 播放视频时不能全屏问题

问题描述 android4.4以上系统webview 播放视频时不能全屏问题 如题,如何解决android4.4以上系统webview 播放视频时不能全屏问题 解决方案 Android用Webview播放优酷视频全屏问题android webview 播放视频 解决方案二: 是不是浏览器的兼容问题啊

Android编程实现播放视频的方法示例

本文实例讲述了Android编程实现播放视频的方法.分享给大家供大家参考,具体如下: 播放视频文件其实并不比播放音频文件复杂,主要是使用 VideoView 类来实现的.这个 类将视频的显示和控制集于一身,使得我们仅仅借助它就可以完成一个简易的视频播放器. VideoView 的用法和 MediaPlayer 也比较类似,主要有以下常用方法: 方法名 功能描述 setVideoPath() 设置要播放的视频文件的位置. start() 开始或继续播放视频. pause() 暂停播放视频. res

WMP播放视频时CPU占用太高怎么办

在win XP系统下,不少用户开启了win Media Player(下称WMP)播放器的视频加速功能,通过此方式,可以为部分老显卡来更好的高清播放效果.当操作系统发展到win 7时,绝大多数用户的硬件环境,已经可以很好的应对高清播放的需求,因此,在win XP中发挥作用的视频加速功能,现在有些过时了. 问题:win7下WMP 12播放视频时,CPU使用率过高. 本文看点:XP时代很好的功能,在win7时代未必依然合适. win 7用户使用WMP 12播放高清视频文件时,时常会发现CPU使用率居

win7播放视频时出现绿屏故障怎么办?

  win7播放视频时出现绿屏故障 相信很多小伙伴在使用win7时出现先过状况,例如使用win7播放视频时出现绿屏故障.下面小编将给大家展示如何解决这个故障. 1.首先在你打开的播放器中,如果遇到绿屏现象的话就鼠标在上面右击选择"设置"选项; 2.在弹出来的设置框中将"启用硬件加速"前面的勾取消掉,然后点击"关闭"按钮; 3.重新刷新一下网页就会发现绿屏的问题不见了.如果还不行的话建议更新一下flash试试看应该就可以解决了.

脚本-chrome全屏播放视频时如何消除底部系统自带的控制条

问题描述 chrome全屏播放视频时如何消除底部系统自带的控制条 用chrome播放视频全屏时,底部总是会弹出自带的控制条,脚本里用controls来控制也不行,这该如何解决? 解决方案 https://www.zhihu.com/question/33594879/answer/57730822