程序开发一个不会重复造轮子,但如果有时间自己造一个也不错。比如图表的,别人的开源代码集成了很多图表,而且修改图表的样式不方便,自己写一个的话就可以随意的更改样式,想咋改就咋改,而且改起来方便快捷。下面分享一下我自己写的一个行情走势图表。
1,使用预览
<cn.lib.ui.widget.LineChart
android:id="@+id/lc_gold"
android:layout_width="match_parent"
android:layout_height="@dimen/y125"
android:layout_marginLeft="@dimen/x10"
line:lineWidth="1.5dp"
line:ySplitCount="6" />
XML的layout里面加上行情布局,行情图表有个从左到右的伸展动态效果,图片效果如下。
2,代码分析
<pre name="code" class="html"><declare-styleable name="LineChart">
<attr name="xData" format="integer"/>
<attr name="yData" format="float"/>
<attr name="ySplitCount" format="integer" />
<attr name="lineWidth" format="dimension" />
<attr name="lineColor" format="reference|color"/>
<attr name="textSize" format="dimension"/>
</declare-styleable>
添加行情图表的自定义属性文件,xData为X轴最大值,yData为Y轴最大值,ySplitCount为Y轴分段数量。
/**
* 当输入的x轴数据最大值大于之前的mXData值,mXMaxData=xMaxData,否则不变(y也一样)
* @author HuangYuGuang
* Create on 2015年8月19日
* @param datas 输入的xy数据
*/
public void setData(List<LineData> datas){
mDatas = datas;
int xMaxData = 0;
float yMaxData = 0;
float yMinData = 1000000;
for(int i=0; i<mDatas.size(); i++){
LineData data = mDatas.get(i);
if(data.getX() > xMaxData) xMaxData = data.getX();
if(data.getY() > yMaxData) yMaxData = data.getY();
if(data.getY() < yMinData) yMinData = data.getY();
}
float h = yMaxData - yMinData;
if(h == 0) h=0.05f;
if(xMaxData != 0) mXMaxData = xMaxData;
if(yMaxData != 0) mYMaxData = yMaxData&#