利用递归算法和堆栈实现android思维导图大纲图的动态绘制
来源:互联网 发布:矩阵相乘的共轭转置 编辑:程序博客网 时间:2024/05/29 19:57
刚拿到ui效果的时候,第一感觉很炫,但实现起来会很复杂,晚上在床上的时候才想到的实现思路。
先看效果图
正常模式的图:
擦除模式的图
两种模式随意交替
功能分析
首先每个按钮出现个数是不固定的,由服务端返回,当然层数也是不固定的,这样一来就只能用递归来实现,我的一位做ios的同事没有用递归,硬是写了7层循环,最多支持7层。下面是我的分析过程:
1.下一个按钮=当前按钮.onclick事件。
2.在正常模式下,每个按钮不能重复点击,防止重复绘制。
3.擦除模式和正常模式交替,只能使用栈去管理,按层数去擦除。
功能实现
我使用addview方法每次将按钮绘制到一个自定义的水平垂直滚动的view,方便用户随意拖拉,在button创建的时候记录button的内存值到栈中,方便removeview,画线封装了一个方法,入参为起点坐标、终点坐标、偏移量,偏移量的引入是防止同一层线条重复,偏移量大致和离顶部距离成正比。当然在绘制button的时候,要考虑数量,计算位置使得button对称,且不能超出上方。
递归方法
public void drawbutton(起点坐标,终点坐标,当前层数,其他信息){ Button bt[];//定义一个bt数组并赋值 //代码省略 final int tree_current = tree_h;// 当前层数; for (int i = 0; i < bt.size(); i++) { bt[i] = new Button(Activity.this); bt[i].setBackgroundResource(R.drawable.partokbutton);//设置图片 //代码省略 //button动画 ScaleAnimation animation = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); animation.setInterpolator(new BounceInterpolator()); animation.setStartOffset(50);// 动画秒数。 animation.setFillAfter(true); animation.setDuration(700); bt[i].startAnimation(animation); bt[i].setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //计算出下一层button信息 drawbutton(起点坐标,终点坐标,当前层数,其他信息);//递归算法 //如果是擦除模式出栈mstack.pop(tree_current); } } //计算出每个button位置,add到主iew里,并画线。 insertLayout.addView(bt[i], layoutParams[i]); mstack.push(view,tree_current); }}
3 0
- 利用递归算法和堆栈实现android思维导图大纲图的动态绘制
- 利用递归算法、堆栈打造一个android可擦除思维导图
- 绘制思维导图
- 计算机网络原理大纲思维导图
- Java基础思维导图大纲
- 思维导图及绘制思维导图的软件
- 编写n的阶乘的递归算法和利用栈结构的非递归实现算法
- 利用canvas实现折线图的绘制
- 如何绘制思维导图
- XMind8绘制思维导图
- 数据结构-----前序遍历二叉树非递归算法(利用堆栈实现)
- 数据结构-----中序遍历二叉树非递归算法(利用堆栈实现)
- 数据结构-----后序遍历二叉树非递归算法(利用堆栈实现)
- 思维导图:问题驱动的软件测试管理大纲(图)
- 递归函数的堆栈实现
- 利用MFC绘制动态矩阵图
- 利用递归法和pygame实现迷宫寻路的动态展示_Prj002
- 算法学习之递归和堆栈
- 解决Android解析图片的OOM问题!!!
- OFBiz 初步 之 权限设计
- GiT 和 svn的区别
- AngularJS数组操作
- jquery实现相册随机切换
- 利用递归算法和堆栈实现android思维导图大纲图的动态绘制
- 软件工程UML图的学习(各种关系及线箭头疑点解析)
- C#里的SubString和Convert.ToDateTime
- Android Studio多渠道打包和代码混淆教程
- UITableView和UITableViewCell的层级关系
- C# 使用 MD5 加密
- OkHttpUtils一个专注于让网络请求更简单的框架
- 【分享】WeX5的正确打开方式(2)
- Spring/Hibernate 应用性能优化的7种方法