国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android DragVideo實(shí)現(xiàn)播放視頻時(shí)任意拖拽的方法

2019-12-12 04:19:59
字體:
供稿:網(wǎng)友

Android DragVideo實(shí)現(xiàn)播放視頻時(shí)任意拖拽

DragVideo

A Method to Drag the Video When Playing Video

一種在播放視頻時(shí),能夠拖拽的方案

為什么有這個(gè)工程

經(jīng)常在愛奇藝網(wǎng)站上看電影,看到如果滑動(dòng)掩蓋了播放窗口后,就后在最下面有一個(gè)小播放界面。并且這個(gè)播放界面,是可以任意拖拽的。感覺很酷

這里寫圖片描述

既然web端能實(shí)現(xiàn),就想了想在移動(dòng)端設(shè)備上,是否也能實(shí)現(xiàn)這個(gè)效果,于是就有了…

效果圖:


這里寫圖片描述 ――――――> 這里寫圖片描述

實(shí)現(xiàn)思路:1、播放視頻的view選擇TextureView

2、ListView下方蓋上自定義ViewDragHelper,當(dāng)在播放視頻時(shí),通過自定義ViewDragHelper進(jìn)行拖動(dòng)TextureView

3、進(jìn)行漸變處理,讓兩個(gè)view的文字能夠交替顯示

4、當(dāng)TextureView到達(dá)右下方時(shí),控制在水平方向上拖動(dòng),到達(dá)左邊界時(shí),如果再滑動(dòng),就銷毀TextureView代碼分析:

關(guān)于ViewDragHelper要注意如下幾點(diǎn):

1.ViewDragHelper.Callback是連接ViewDragHelper與view之間的橋梁(這個(gè)view一般是指擁子view的容器即parentView)。

2.ViewDragHelper的實(shí)例是通過靜態(tài)工廠方法創(chuàng)建的;你能夠指定拖動(dòng)的方向;ViewDragHelper可以檢測到是否觸及到邊緣;

3.ViewDragHelper并不是直接作用于要被拖動(dòng)的View,而是使其控制的視圖容器中的子View可以被拖動(dòng),如果要指定某個(gè)子view的行為,需要在Callback中想辦法;

4.ViewDragHelper的本質(zhì)其實(shí)是分析onInterceptTouchEvent和onTouchEvent的MotionEvent參數(shù),然后根據(jù)分析的結(jié)果去改變一個(gè)容器中被拖動(dòng)子View的位置( 通過offsetTopAndBottom(int offset)和offsetLeftAndRight(int offset)方法 ),他能在觸摸的時(shí)候判斷當(dāng)前拖動(dòng)的是哪個(gè)子View;

5.雖然ViewDragHelper的實(shí)例方法.ViewDragHelper create(ViewGroup forParent, Callback cb) 可以指定一個(gè)被ViewDragHelper處理拖動(dòng)事件的對象,但ViewDragHelper類的設(shè)計(jì)決定了其適用于被包含在一個(gè)自定義ViewGroup之中,而不是對任意一個(gè)布局上的視圖容器使用ViewDragHelper。

1.自定義的CustomViewDragHelper的初始化

ViewDragHelper一般用在一個(gè)自定義ViewGroup的內(nèi)部,比如下面自定義了一個(gè)直接繼承于ViewGroup的類DragvideoView,DragvideoView內(nèi)部有一個(gè)mDragHelper作為成員變量:

這里寫圖片描述

創(chuàng)建一個(gè)帶有回調(diào)接口的ViewDragHelper,這里是用MyHelperCallback,這些都是一些基本使用方法
拖動(dòng)行為的處理已在注釋中給出

這里寫圖片描述
這里寫圖片描述
這里寫圖片描述

當(dāng)在MainActivity調(diào)用ViewDragHelper的setCallback方法時(shí),以上回調(diào)就能作用了。當(dāng)點(diǎn)擊節(jié)目列表頁(第一個(gè)顯示listview的界面)的item時(shí),調(diào)用playVideo()方法,方面內(nèi)部通過DragVideoView.show方法,就開始顯示DragVideoView。這時(shí)視頻開始播放起來,并且,我們也可以對其進(jìn)行拖拽了。

這里寫圖片描述 

那么在拖動(dòng)的過程中,我們要在DragVideoView中重寫onTouchEvent方法,如下

這里寫圖片描述

以上方法最后,我們調(diào)用了,mDragHelper.processTouchEvent(event);也就是我們自定義的CustomViewDragHelper類,這個(gè)方法沒有改動(dòng),就是ViewDragHelper的processTouchEvent方法。

這里寫圖片描述
這里寫圖片描述
這里寫圖片描述 

總結(jié)下這個(gè)方法

在processTouchEvent中對ACTION_DOWN、ACTION_MOVE和ACTION_UP事件進(jìn)行了處理:

1.在ACTION_DOWN中調(diào)用回調(diào)接口中的tryCaptureView方法,看當(dāng)前touch的view是否允許拖動(dòng)

2.在ACTION_MOVE中,view的坐標(biāo)發(fā)生改變,調(diào)用回調(diào)接口中的onViewPositionChanged方法,根據(jù)坐標(biāo)信息對view進(jìn)行l(wèi)ayout,通過ViewHelper這個(gè)類中的setScaleX、setScaleY方法,實(shí)現(xiàn)在拖動(dòng)的過程中view在XY坐標(biāo)上進(jìn)行相應(yīng)比例的縮放;

3.在ACTION_UP后調(diào)用回調(diào)接口中的onViewReleased方法,此方法中一個(gè)重要的任務(wù)是在ACTION_UP事件后,實(shí)現(xiàn)view的自動(dòng)滑動(dòng),這里主要是使用了ViewDragHelper中smoothSlideViewTo方法

這里寫圖片描述

接著到達(dá)forceSettleCapturedViewAt方法

這里寫圖片描述

上面start了ViewDragHelper中的mScroller,在滑動(dòng)過程中,通過重寫computeScroll方法,可用用ViewCompat.postInvalidateOnAnimation(this)方法重繪view

這里寫圖片描述

最后由于拖拽過程中的顯示視頻的TextureView會(huì)不斷變化,通過設(shè)置TextureView.SurfaceTextureListener,來監(jiān)聽當(dāng)前TextureView的變化過程。

這里寫圖片描述

項(xiàng)目下載地址:http://xiazai.VeVB.COm/201612/yuanma/DragVideo-master(VeVB.COm).rar

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 长葛市| 运城市| 原阳县| 吴桥县| 芜湖市| 论坛| 长岭县| 普兰县| 东兰县| 乌拉特中旗| 永兴县| 高陵县| 乐亭县| 西昌市| 金华市| 建平县| 山西省| 辽阳市| 高雄市| 清涧县| 大埔县| 新野县| 哈密市| 隆化县| 长兴县| 敦煌市| 峨眉山市| 旅游| 板桥市| 察雅县| 新蔡县| 巴中市| 噶尔县| 恩施市| 沙洋县| 玉环县| 仪陇县| 英吉沙县| 安远县| 固原市| 顺平县|