源码简介

本例子实现的功能是很多新闻阅读器(网易,今日头条,360新闻等)以及腾讯视频等里面都会出现的频道管理功能,点击可以增删频道,长按拖拽排序。下面的效果图没有拖拽的时候的移动动画,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例子源码仿网易360新闻等新闻阅读器频道管理 Android例子源码仿网易360新闻等新闻阅读器频道管理 Android例子源码仿网易360新闻等新闻阅读器频道管理

文件夹 PATH 列表
卷序列号为 66137F51 3CD2:D088
C:.
│  javaapk.com文件列表生成工具.bat
│  JavaApk源码说明.txt
│  目录列表.txt
│  
└─TopNewGrid
    │  .classpath
    │  .project
    │  AndroidManifest.xml
    │  ic_launcher-web.png
    │  proguard-project.txt
    │  project.properties
    │  
    ├─.settings
    │      org.eclipse.jdt.core.prefs
    │      
    ├─assets
    │              
    ├─gen
    │  └─com
    │      └─example
    │          └─topnewgrid
    │                  BuildConfig.java
    │                  R.java
    │                  
    ├─libs
    │      android-support-v4.jar
    │      
    ├─res
    │  ├─color
    │  │      btn_common_text.xml
    │  │      subscribe_item_text_color.xml
    │  │      
    │  ├─drawable
    │  │      bg_titlebar.xml
    │  │      btn_back.xml
    │  │      btn_common.xml
    │  │      subscribe_item_bg.xml
    │  │      subscribe_item_text_color_night.xml
    │  │      
    │  ├─drawable-hdpi
    │  │      ic_launcher.png
    │  │      
    │  ├─drawable-ldpi
    │  ├─drawable-mdpi
    │  │      ic_launcher.png
    │  │      
    │  ├─drawable-nodpi
    │  │      transparent.9.png
    │  │      
    │  ├─drawable-xhdpi
    │  │      btn_back_normal.png
    │  │      btn_back_pressed.png
    │  │      btn_common_disabled.9.png
    │  │      btn_common_normal.9.png
    │  │      btn_common_pressed.9.png
    │  │      channel_new.png
    │  │      ic_launcher.png
    │  │      
    │  ├─drawable-xxhdpi
    │  │      ic_launcher.png
    │  │      
    │  ├─layout
    │  │      subscribe_activity.xml
    │  │      subscribe_category_item.xml
    │  │      title_bar.xml
    │  │      
    │  ├─menu
    │  │      main.xml
    │  │      
    │  ├─values
    │  │      colors.xml
    │  │      dimens.xml
    │  │      strings.xml
    │  │      styles.xml
    │  │      
    │  ├─values-sw600dp
    │  │      dimens.xml
    │  │      
    │  ├─values-sw720dp-land
    │  │      dimens.xml
    │  │      
    │  ├─values-v11
    │  │      styles.xml
    │  │      
    │  └─values-v14
    │          styles.xml
    │          
    └─src
        └─com
            └─example
                └─topnewgrid
                    │  ChannelActivity.java
                    │  
                    ├─adapter
                    │      DragAdapter.java
                    │      OtherAdapter.java
                    │      
                    ├─app
                    │      AppApplication.java
                    │      
                    ├─bean
                    │      ChannelItem.java
                    │      ChannelManage.java
                    │      
                    ├─dao
                    │      ChannelDao.java
                    │      ChannelDaoInface.java
                    │      
                    ├─db
                    │      DBUtil.java
                    │      SQLHelper.java
                    │      
                    ├─tools
                    │      DataTools.java
                    │      
                    └─view
                            DragGrid.java
                            OtherGridView.java
                            

12条源码讨论
发表评论

您必须登录才能评论.

10# frankie2011 2016-08-18 下午6:01

下载的project能在AS跑么?我这里出现了bug

9# kn0527 2016-03-20 上午12:16

完美O(∩_∩)O

    frankie2011 2016-08-18 下午6:01

    下载的project能在AS跑么?我这里出现了bug

8# kn0527 2016-03-20 上午12:16

谢谢

7# 2012juhua 2015-05-22 下午2:12

学习学习

6# Andyliao 2015-01-20 上午10:37

很不错的学习资料 正好用的上

5# demonstay 2014-09-23 上午10:50

不错,感谢

4# zt1991616 2014-06-20 下午3:08

正好用得着

地板 liup00001@163.com 2014-05-18 下午12:10

支持,非常感谢

板凳 yezihengok 2014-05-16 上午10:17

非常不错,注释很详细,感谢分享。

    frankie2011 2016-08-18 下午6:03

    我下载下来再AS跑出现了bug—-java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.topnewgrid/com.example.topnewgrid.ChannelActivity}: android.view.InflateException: Binary XML file line #5: Error inflating class android.widget.TextView—-这是什么原因呢?求解

沙发 yezihengok 2014-05-16 上午10:04

下载看看拖动效果

©2013-2019 JavaApk.com· 鲁ICP备13032311号-1· Powered by WordPress· Theme by JavaApkTM · 网站地图.19 queries in 0.088 seconds