閱讀86 返回首頁    go 阿裏雲 go 技術社區[雲棲]


仿今日頭條的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.  退出時候,將改變後的頻道列表存入數據庫。



四、流程圖

下麵是大體的流程圖:

注:本DEMO中,加入了長按震動,所以在權限裏麵記得加上“

[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

  上一篇:go cocos2d 在windows環境下搭建
  下一篇:go AndroidUI設計之 布局管理器 - 詳細解析布局實現