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

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容器用来保存所有的标签文本,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 APP,借此可以方便的对一些选项进行随机选择…

在这里插入图片描述

安装包下载地址:
https://github.com/NJU-TJL/TextTagsCloud/releases

效果:(在模拟器中运行)

使用:

  1. 输入“待添加的标签内容”后,点击左侧的加号按钮,即可加入新标签
  2. 左侧的“清空”按钮,用于清空所有标签
  3. 点击上方的某个标签,可以删除此标签
  4. 下方的红色的“随机”按钮,用于随机在这些标签中随机选出一个

其他:

为什么这个色调?因为…据说红黄色有助于食欲~hhh

项目地址: https://github.com/NJU-TJL/TextTagsCloud


Copyright © 2020 NJU-TJL

开放源代码许可

转载请注明原作者:https://github.com/NJU-TJL/TextTagsCloud


总结

该如何使用TagCloudView呢?总结一下

  1. 自定义一个MyAdapter(继承自TagsAdapter类),在这个类里面完成对需要展示标签数据的处理,重写getViewgetCount等的方法;
  2. 调用TagCloudView的setAdapter方法设置好这个自定义的MyAdapter即可;
  3. 如果数据发生了更改(比如:增加、删除…),调用TagsAdapternotifyDataSetChanged即可更新UI界面。

PS:TagCloudView有一些定制属性可以设置,比如半径百分比、滚动速度、颜色等,在Github中原作者已给出说明,可以去看看。

你可能感兴趣的:(Android炫酷的3D球型标签云开源库 3dTagCloudAndroid 的使用)