本例子实现的功能是很多新闻阅读器(网易,今日头条,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. 退出时候,将改变后的频道列表存入数据库。
文件夹 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
您必须登录才能评论.
我下载下来再AS跑出现了bug
下载的project能在AS跑
下载的project能在AS跑
完美O(∩_∩)O
谢谢
学习学习
很不错的学习资料 正好用的上
不错,感谢
正好用得着
支持,非常感谢