开源库地址:
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
容器用来保存所有的标签文本,getView
就是根据传入的position参数,从容器中取出对应位置的String文本,然后根据这个String文本生成一个TextView,然后可以对TextView额外设置一些属性(比如这里使用了setGravity
和setOnClickListener
),最后返回这个设定完成后的TextView。
其他重写的方法则较为简单,含义也比较明确,看看示例代码就可以明白,这里不再叙述。
其余的两个ViewTagsAdapter、VectorTagsAdapter,与TextTagsAdapter非常类似,只是getView
中返回的View类型不同,在getView中也对返回的View处理稍有不同。
在原项目的说明中,作者只说了怎么开始使用,但是没有提到数据变化时该怎么操作(比如 增加、删除、清空标签View了之后,该如何更新UI界面呢?)。
一般来说,Adapter都会有提供更新展示View的一个方法,所以在一开始我就是猜想作者应该也是设计了一个方法,用来在Adapter对应的数据变化时,通知UI界面做出改变。
通过阅读TagsAdapter的实现源码,可以发现,其中有一个方法名为notifyDataSetChanged
,显然,这就是我们需要的那个功能。
简单来说,可以这么理解:调用notifyDataSetChanged
函数,TagCloudView 将会重新生成(即其中绑定的TagsAdapter的getView
等方法重新会被TagCloudView 调用一次)。
有的时候,我们经常面临“吃什么”这样类似的选择难题…
所以,这次利用这个开源库,做了一个用于随机选择的Android APP,借此可以方便的对一些选项进行随机选择…
安装包下载地址:
https://github.com/NJU-TJL/TextTagsCloud/releases
效果:(在模拟器中运行)
使用:
其他:
为什么这个色调?因为…据说红黄色有助于食欲~hhh
项目地址: https://github.com/NJU-TJL/TextTagsCloud
Copyright © 2020 NJU-TJL
开放源代码许可
转载请注明原作者:https://github.com/NJU-TJL/TextTagsCloud
该如何使用TagCloudView呢?总结一下
TagsAdapter
类),在这个类里面完成对需要展示标签数据的处理,重写getView
、getCount
等的方法;setAdapter
方法设置好这个自定义的MyAdapter即可;TagsAdapter
的notifyDataSetChanged
即可更新UI界面。PS:TagCloudView有一些定制属性可以设置,比如半径百分比、滚动速度、颜色等,在Github中原作者已给出说明,可以去看看。