自定义控件-- 柱状图--Android

开篇博客就说过, 有时间了就把自己项目中自定义的控件专门记录下;      大家都知道,Android传统的控件样式大多数情况都不能很好的满足我们的实际需求,其实最好的办法就是能找到网上高人们写好的开源控件,但是不是每次都那么凑巧让我们找得到吧? 既然求爹爹告奶奶的到最后还是没有着落,干脆自己研究下怎么重写喽~     其实大部分我们看见的控件都继承自View,那么我们也可以继承Vie
摘要由CSDN通过智能技术生成

       开篇博客就说过, 有时间了就把自己项目中自定义的控件专门记录下;

      大家都知道,Android传统的控件样式大多数情况都不能很好的满足我们的实际需求,其实最好的办法就是能找到网上高人们写好的开源控件,但是不是每次都那么凑巧让我们找得到吧? 既然求爹爹告奶奶的到最后还是没有着落,干脆自己研究下怎么重写喽~

      折线图的实现: http://blog.csdn.net/quanjin24k/article/details/10784081

     其实大部分我们看见的控件都继承自View,那么我们也可以继承View,重写其中的onDraw()方法,将我们的需求在其中展现绘制出来呀~ 最终拼凑组装出自己的控件哈~~

     另外,当我们需要对某些个控件,比如一个按钮,我点击之后背景变换,出现我想要的背景切换效果,其实用xml定义个selector也能实现,不过有时候的确不是我们想要的,干脆就一写到底!也重写了得了! 那么我们就可以继承自Layout(FrameLayout, RelativLayout,LinearLayout);

      依照惯例, 先爆几张效果图, 看看如果不重写的话,作为你,如何解决··

      重写的柱状图, 用来动态的显示对比关系, 当然了,还是那个问题, 项目还没有接近尾声,不好过多的透漏细节[so,自己PS了下··],但是技术点是不会打折的!!!

   

我了个天  图怎么这么大呀!!!

好, 先分析分析这个UI该怎么布置, 大家看重点区域啊、 就是柱状图了哈、 当初我拿到这个UI的时候, 在想,我一个一个元素拼接起来行不? 但是一想这不符合Android的面向组件的思想【就像Java要遵循面向对象一样】,怎么破?

那么只能说自己重新定义一个特定规格的控件,然后无限引用就ok; 当然了, 设计到的细节可以慢慢微调,关键是设计、实现思路; 4跟柱子代表4个平级的指标; 横向虚线表示平均值, 底部的是柱子的title,字体倾斜哈~~遵循特定走向;

那么我们可以在extended View 中的onDraw() 重写方法中慢慢画,肯定能凑出自己想要的效果;不要怕麻烦哦~  因为当时我想过要研究下Android开源控件AChartEngine,但是看了下有点头大,加上自己当时比较紧张,干脆重写了;

  说了一大堆当时的心里, 现在开始上代码了; 其实要实现不难,关键是思路要清晰;

@SuppressLint("DrawAllocation")
public class RoeweBrandsItemButton extends View{

	private String roeweBrandsItemNum = "748";
	private String roeweBrandsItemName = "客流数";
	private String roeweBrandsSaleRegion1 = "一区";
	private String roeweBrandsSaleRegion2 = "二区";
	private String roeweBrandsSaleRegion3 = "三区";
	private String roeweBrandsSaleRegion4 = "四区";
	private int saleRegion1ColumnsHeight = 60;//销售1区的高度  max=160
	private int saleRegion2ColumnsHeight = 10;//销售2区的高度
	private int saleRegion3ColumnsHeight = 60;//销售3区的高度
	private int saleRegion4ColumnsHeight = 10;//销售4区的高度
	
	private int textOritation = 2;//文字方向控制。
	private String roeweBrandsItemDynamicLineNum = "618";
	private int roeweBrandsHorizentalLineHeight = 150;//水平线高度。
	
	private Paint textPaint = new Paint();//文字画笔.
	private Paint columns13Paint = new Paint();//柱子画笔-亮色柱子.
	private Paint columns24Paint = new Paint();//柱子画笔-暗色柱子.
	private Paint dynamicLinePaint = new Paint();//动态线画笔。
	private int colorId = 1;//标记3中不同颜色。
	private int columnNum = 4;//柱子个数。

	//constructor.
	public
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值