[android view]标签云原理、难点以及简单实现总结

标签云效果,比如最出名的wordle,看看能否在andorid上实现,才发现并不容易,因为想做可视化而并不是为了分词,所以感觉难点在布局。这里有两篇博客http://book.51cto.com/art/201108/281730.htm,http://book.51cto.com/art/201108/281728.htm,写的不错第一篇博客提到了在wordle里采用的方法就是一个简单有效的算法——随机贪婪算法。你可以随意地把单词拖放到屏幕中某个期望位置附近,而如果该单词和其他单词存在交叠,就重新再试一次,直到它不再与其他单词交叠为止,第二篇与之不同的是说在调整相应位置时根据一定的路径, 在这里再推荐下http://stackoverflow.com/questions/342687/algorithm-to-implement-a-word-cloud-like-wordle 这个问题wordle原作者亲自回答~~而且还有其他人做的一些。

开始在andorid上下手, 搜了一下并且下载了一个做的还可以的源码 附上链接http://www.apkbus.com/android-232291-1-1.html 它比较好的地方是实现了动画效果,他大体是重写viewgroup 把textview放进去布局,他在找textview大体好像是要记录已经走过的xy。。如果相交,按一定的路径来找下一个可以放置的点,具体代码就我就不班门弄斧而且也没怎么看懂~写的很好,而且有些小地方我借鉴了,比如如何确定字矩形的宽度。我主要的想法是直接重写view 然后让文字直接drawtext。主要是在检测到矩形相交后随机在选择点进行计算(还真是随机贪婪算法,一点路径也没考虑),直到放好所有的。。这就导致并不是所有的时候都能够完美的展现出来(BUG),而且即使摆放好也与想要的效果差好远~~除了这一点 在改进检测重复即检测碰撞算法上也可以改进,基本上上面那几个博客都有提到,我想用四叉树(http://bbs.9ria.com/thread-148625-1-1.html)改进下,结果效果反而越来越不好,反正在安卓上放的标签也不可能太多,所以对效率影响不大。最后大体就做了这么一个东西,我也不知道200*200能放多少标签,反正自己慢慢试。。

详细代码:

 

package com.example.visualization;

import com.example.tools.CloudItemClickListener;
import com.example.tools.TagCloud;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;

public class TagCloudActivity extends Activity {
	TagCloud cloud;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		this.requestWindowFeature(Window.FEATURE_NO_TITLE);
		this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);
		setContentView(R.layout.tagcloud);

		cloud = (TagCl
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值