Android炫酷的3D球形标签云开源库 3dTagCloudAndroid 的使用

文章目录

  • Android炫酷的3D球形标签云开源库 3dTagCloudAndroid 的使用
    • 学习过程
    • 使用体会
    • 实战
    • 总结

本文主要记录一下使用开源库 3dTagCloudAndroid 的一些心得体会。

开源库地址:
https://github.com/misakuo/3dTagCloudAndroid

简介:

TagCloudView是一个基于ViewGroup实现的控件,支持将一组View展示为一个3D球形集合,并支持全方向滚动。

UI效果:

学习过程

原作者在Github项目中已对此开源库的使用方法有部分说明,这里不再重复。

这里主要记录自己是如何学习使用这个开源库的。

首先,使用 git clone 下载 3dTagCloudAndroid 的Demo项目,用Android Studio打开(可能会提示需要下载缺少的对应版本的SDK和Gradle,按提示点击下载,自动完成即可),从MainActivity.java(主界面)开始阅读示例代码,看看究竟该如何使用TagCloudView。

MainActivity.java里面只有一个onCreate方法,其中比较关键的代码如下:

        tagCloudView = (TagCloudView) findViewById(R.id.tag_cloud);textTagsAdapter = new TextTagsAdapter(new String[20]);viewTagsAdapter = new ViewTagsAdapter();vectorTagsAdapter = new VectorTagsAdapter();tagCloudView.setAdapter(textTagsAdapter);

这里分别创建了三种TagsAdapter。可见,这里的Tag有三种类型:simple text tag、custom view tag、vectordrawable tag(从三个按钮的名字就可以看出来)。

所以,看到这里,可以发现:这里需要使用哪种类型的tag,就使用对应类型adapter,然后调用TagCloudView的setAdapter方法即可。

接下来,研究一下如何定义这些Adapter。

依次查看TextTagsAdapter.java、ViewTagsAdapter.java、VectorTagsAdapter.java,可以发现他们均是继承了TagsAdapter类。

这里可以从最简单的TextTagsAdapter入手,阅读其代码,可以发现这个自定义的TextTagsAdapter类,重写很多TagsAdapter的方法。主要的如下:

public int getCount();
//返回Tag数量public View getView(Context context, int position, ViewGroup parent);
//返回每个Tag实例public Object getItem(int position);
//返回Tag数据public int getPopularity(int position);
//针对每个Tag返回一个权重值,该值与ThemeColor和Tag初始大小有关;一个简单的权重值生成方式是对一个数N取余或使用随机数public void onThemeColorChanged(View view,int themeColor);
//Tag主题色发生变化时会回调该方法

其中,最为重要是 getView 方法。

TextTagsAdapter成员中有一个List<String>容器用来保存所有的标签文本,getView 就是根据传入的position参数,从容器中取出对应位置的String文本,然后根据这个String文本生成一个TextView,然后可以对TextView额外设置一些属性(比如这里使用了setGravitysetOnClickListener),最后返回这个设定完成后的TextView。

其他重写的方法则较为简单,含义也比较明确,看看示例代码就可以明白,这里不再叙述。

其余的两个ViewTagsAdapter、VectorTagsAdapter,与TextTagsAdapter非常类似,只是getView中返回的View类型不同,在getView中也对返回的View处理稍有不同。

使用体会

在原项目的说明中,作者只说了怎么开始使用,但是没有提到数据变化时该怎么操作(比如 增加、删除、清空标签View了之后,该如何更新UI界面呢?)。

一般来说,Adapter都会有提供更新展示View的一个方法,所以在一开始我就是猜想作者应该也是设计了一个方法,用来在Adapter对应的数据变化时,通知UI界面做出改变。

通过阅读TagsAdapter的实现源码,可以发现,其中有一个方法名为notifyDataSetChanged,显然,这就是我们需要的那个功能。

简单来说,可以这么理解:调用notifyDataSetChanged函数,TagCloudView 将会重新生成(即其中绑定的TagsAdapter的getView等方法重新会被TagCloudView 调用一次)。

实战

有的时候,我们经常面临“吃什么”这样类似的选择难题…

Android炫酷的3D球型标签云开源库 3dTagCloudAndroid 的使用相关推荐

  1. 几个炫酷的3D旋转动态效果(附代码)

    之前,我们发布了极客编程挑战赛,竞赛题目是"制作炫酷的3D旋转动态显示效果",想知道更多信息,请前往以下地址进行了解:http://www.gbtags.com/gb/share/ ...

  2. 520情人节送女朋友的3D相册礼物~html+css+js实现抖音炫酷樱花3D相册(含音乐)

    520情人节送女朋友的3D相册礼物~html+css+js实现抖音炫酷樱花3D相册(含音乐) 一年一度的/520情人节/七夕情人节/生日礼物/告白师妹/程序员表白,是不是要给女朋友或者正在追求的妹子一 ...

  3. ❤520情人节送女朋友的生日礼物~html+css+js实现抖音炫酷樱花3D相册(含音乐)

    ❉ 520情人节送女朋友的3D相册礼物~html+css+js实现抖音炫酷樱花3D相册(含音乐) 一年一度的/520情人节/七夕情人节/生日礼物/告白师妹/程序员表白,是不是要给女朋友或者正在追求的妹 ...

  4. 纯CSS3制作炫酷的3D相册

    纯CSS3制作炫酷的3D相册 整体效果如下所示: 整体代码如下所示: html中的代码 <!DOCTYPE html> <html lang="en"> & ...

  5. 【每日一练】36—CSS实现一款炫酷的3D 文本旋转效果

    写在前面 关于CSS 3D的效果,我之前也分享过一些,在视频号上也有,当然,视频号上没有源码,有兴趣的小伙伴,可以跟着视频自己敲代码,当然,这些代码,我后面也会分享到我们的网站上,大家可以直接到网站上 ...

  6. android 炫酷进度条,Android打造炫酷进度条效果

    本文实例为大家分享了Android炫酷进度条效果的具体代码,供大家参考,具体内容如下 HorizontalProgressbarWithProgress的代码 import android.conte ...

  7. [开源项目]Android_炫酷的3D音乐播放器_各种特效OpenGL

    这是 我见过最炫的一个音乐播放器了.里面包含各种特效OpenGL,先上图片...看看大家的反应. 3Dmusic3.png(48.63 KB, 下载次数: 34) 炫酷的3D音乐播放器_各种特效Ope ...

  8. [jQuery]3D效果的标签云

    刚才看了篇园友关于如何自定义标签云的文章,心痒痒自己也想弄一个,其实原理非常简单,就是动态load标签页里的标签,按需要的格式重新动态生成DOM结构,再通过第三方的js插件(他们用的是Google V ...

  9. ❤女朋友生日❤ HTML+css3+js 实现抖音炫酷樱花3D相册 (含背景音乐)程序员表白必备

    一年一度的/520/七夕情人节/女朋友生日/程序员表白,是不是要给女朋友或者正在追求的妹子一点小惊喜呢,今天这篇博客就分享下前端代码如何实现3D立体动态相册.赶紧学会了,来制作属于我们程序员的浪漫吧! ...

最新文章

  1. 生信分析必须了解的4种文件格式
  2. 中国人寿保险研发中心2021校招开始啦!
  3. “挨踢民工”的奇葩生活录
  4. adb链接手机调试android应用
  5. 检测网络耗时_无人机替代桥梁检测车检测桥梁的可行性分析
  6. Programming WCF Services翻译笔记(四)
  7. 架构师是大忽悠吗?阿里技术大牛告诉你真相!
  8. spring mvc学习(10):eclipse的环境前maven配置
  9. 如何用Pygame写游戏(八)
  10. 低代码的兴起:花更少的钱,赚更多的钱
  11. TURBOMAIL邮件服务器—挽救错误邮件
  12. Java设计模式介绍
  13. JAVA代码规范(二)
  14. icesat2:strong beam and weak beam
  15. 利用QGIS提取天地图矢量底图中的建筑模型边界线
  16. CRM客户关系管理系统助力企业处理客户投诉问题
  17. 如何优化一个网站的完整方案-SEO
  18. Unity基本物体和临时对象
  19. Mobile net系列总结(V1、V2、V3)
  20. 一文看懂膨胀(空洞)卷积(含代码)

热门文章

  1. Vue.js笔记------事件
  2. Vue小字典-vue基础
  3. Arduino pro mini upload (使用FT232R)
  4. Linux Sql server 导出,SQL Server导出和导入Excel
  5. 原子的量子态:玻尔模型
  6. 2.9 PS心得体会
  7. 70后游戏辅助开发程序猿的人生路(完结篇)
  8. mysql调优(六)--索引的基础知识
  9. 去掉Word中文档截图的阴影
  10. Redis:Redis配置文件相关配置、Redis的持久化