天天看點

Android 高仿 頻道管理----網易、今日頭條、騰訊視訊 (可以拖動的GridView)附源碼DEMO 一、開發心裡曆程二、開發前的準備三、開發思路四、流程圖 五、核心代碼六、源碼下載下傳

距離上次釋出

相關的内容已經半個月了,最近利用空閑時間,把今日頭條用戶端完善了下。完善的功能一個一個全部實作後,就放整個源碼。開發的進度就是按照一個一個功能的思路走的,是以開發一個小的功能,如果有用,就寫一個專門的部落格以便有人用到獨立的功能可以友善使用。

這次實作的功能是很多新聞閱讀器(網易,今日頭條,360新聞等)以及騰訊視訊等裡面都會出現的頻道管理功能。

下面先上這次實作功能的效果圖:(注:這個效果圖沒有拖拽的時候移動動畫,demo裡面有,可以下載下傳看看)

Android 高仿 頻道管理----網易、今日頭條、騰訊視訊 (可以拖動的GridView)附源碼DEMO 一、開發心裡曆程二、開發前的準備三、開發思路四、流程圖 五、核心代碼六、源碼下載下傳

剛開始接觸這個的時候,不知道要如何實作,去網上翻了一大堆資料,懂了個大概,就是目前可以找到的都是拖拽的時候,不帶移動動畫的,和線上的用戶端互動效果相差甚遠,在反反複複的嘗試檢視相關東西,大緻的做了出來,目前在模拟器上似乎有一點小bug,真機測試沒有問題,就先放上來,如果發現問題在修改優化。代碼反面,沒有好好的修改調整,可能會有點亂,請見諒哈。

1.了解重寫view的相關知識,并且知道gridview的一些内部方法,如:怎麼通過觸摸的坐标擷取對應的position等(這裡我采用的是繼承gridview控件)

2.了解螢幕觸摸動作傳遞原理    這裡我以前轉載的一篇或許會有幫助:

3.了解位移動畫animation,本demo中主要用到:translateanimation  平移動畫

4.了解windowmanager的視窗機制,這裡的item拖拽等都要設計到這個。

5.了解sqlitedatabase 以及sqliteopenhelper等資料庫操作相關的類,本demo中主要用到資料庫進行存儲頻道資訊,如果你要用文檔進行存儲讀取也可以。

1.  擷取資料庫中頻道的清單,如果為空,賦予預設清單,并存入資料庫,之後通過對應的擴充卡賦給對應的gridview

2.  2個gridview--(1.draggrid   2. othergridview)

draggrid 用于顯示我的頻道,帶有長按拖拽效果

othergridview用于顯示更多頻道,不帶推拽效果

注:由于螢幕大小不一定,外層使用scrollview,是以2者都要重寫計算高度

3.  點選2個gridview的時候,根據點選的item對應的position,擷取position對應的view,進行建立一層移動的動畫層

起始位置:點選的positiongetlocationinwindow()擷取。終點位置:另一個gridview的最後個item 的position + 1的位置。

并賦予移動動畫,等動畫結束後對2者對應的頻道清單進行資料的remove和add操作。

4.  設定點選和拖動的限制條件,如  推薦  這個item是不允許使用者操作的。

5.  拖動的draggrid的操作:

(1)長按擷取長按的item的position  -- dragposition 以及對應的view ,手指觸摸螢幕的時候,調用onintercepttouchevent來擷取motionevent.action_down事件,擷取對應的資料。由于這裡是繼承了gridview,是以長按時間可以通過setonitemlongclicklistener監聽來執行,或則你也可以通過計算點選時間來監聽是否長按。

(2)通過ontouchevent(motionevent ev)來監聽手指的移動和擡起動作。當它移動到 其它的item下面,并且下方的item對應的position  不等于 dragposition,進行資料交換,并且2者之間的所有item進行移動動畫,動畫結束後,資料更替重新整理界面。

(3) 擡起手後,清除掉拖動時候建立的view,讓gridview中的資料顯示。

6.  退出時候,将改變後的頻道清單存入資料庫。

下面是大體的流程圖:

Android 高仿 頻道管理----網易、今日頭條、騰訊視訊 (可以拖動的GridView)附源碼DEMO 一、開發心裡曆程二、開發前的準備三、開發思路四、流程圖 五、核心代碼六、源碼下載下傳

點選進行添加删除:

移動動畫:

可拖拽的draggrid代碼: 

資料庫sqlhelper檔案

注:本demo中,加入了長按震動,是以在權限裡面記得加上“

源碼demo下載下傳位址如下:

繼續閱讀