开篇博客就说过, 有时间了就把自己项目中自定义的控件专门记录下;
大家都知道,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