仿今日頭條的graidview拖動
下麵先上這次實現功能的效果圖:(注:這個效果圖沒有拖拽的時候移動動畫,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. 退出時候,將改變後的頻道列表存入數據庫。
四、流程圖
下麵是大體的流程圖:
[java] view plaincopy

- <!-- 在SDCard中創建與刪除文件權限 -->
- <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
- <!-- 往SDCard寫入數據權限 -->
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- <!-- 震動權限 -->
- <uses-permission android:name="android.permission.VIBRATE"/>
六、源碼下載源碼DEMO下載地址如下android
高仿 頻道管理----網易、今日頭條、騰訊視頻 (可以拖動的GridView).rar.rar(1.71 MB, 下載次數: 163)
最後更新:2017-04-03 12:56:36