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

 更新时间:2016年12月15日 16:09:53   作者:逆流的鱼yuiop  
这篇文章主要介绍了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

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

相关文章

  • Android标题栏上添加多个Menu按钮的实例

    Android标题栏上添加多个Menu按钮的实例

    这篇文章主要介绍了Android标题栏上添加多个Menu按钮的实例的相关资料,这里提供简单实例说明如何添加多个menu按钮的方法,需要的朋友可以参考下
    2017-09-09
  • Android App界面的ListView布局实战演练

    Android App界面的ListView布局实战演练

    这篇文章主要介绍了Android App界面的ListView布局方法,文中分了三种情况通过实例来讲解,ListView适用于功能最简单的应用程序UI布局,需要的朋友可以参考下
    2016-04-04
  • Android中shape的自定义艺术效果使用

    Android中shape的自定义艺术效果使用

    大家好,本篇文章主要讲的是Android中shape的自定义艺术效果使用,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • Android Notification的多种用法总结

    Android Notification的多种用法总结

    这篇文章主要介绍了Android Notification的多种用法总结的相关资料,需要的朋友可以参考下
    2017-06-06
  • Android数据加密之异或加密算法的实现方法

    Android数据加密之异或加密算法的实现方法

    下面小编就为大家带来一篇Android数据加密之异或加密算法的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • Android中volley封装实践记录

    Android中volley封装实践记录

    这篇文章主要给大家介绍了关于Android中volley封装实践的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一学习学习吧
    2019-02-02
  • Android中home键和back键区别实例分析

    Android中home键和back键区别实例分析

    这篇文章主要介绍了Android中home键和back键区别,以实例形式较为详细的分析并总结了home键和back键区别及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • 解决EditText不显示光标的三种方法(总结)

    解决EditText不显示光标的三种方法(总结)

    下面小编就为大家带来一篇解决EditText不显示光标的三种方法(总结)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Android开发之DOM解析xml文件的方法

    Android开发之DOM解析xml文件的方法

    这篇文章主要介绍了Android开发之DOM解析xml文件的方法,涉及Android中DOM工厂对象的创建,文档的获取及节点的遍历技巧,需要的朋友可以参考下
    2015-12-12
  • 点击微信内网页a标签直接跳转打开淘宝APP的方法实例

    点击微信内网页a标签直接跳转打开淘宝APP的方法实例

    这篇文章主要给大家介绍了关于如何实现点击微信内网页a标签直接跳转打开淘宝APP的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-11-11

最新评论