之前有写过一个图表自由,但是开发的速度,大多很难跟上产品需求变化的脚步,所以修改了下原先的图表库、支持图表下面能整合表显示对应的类目,用曲线替换了折线,支持多曲线的显示,增加了显示的动画,增加了一些可定制的属性,支持水平柱状图和叠加柱状图,以及多曲线图和饼状图的显示,下面话不多说了,来一起看看详细的介绍吧。
1。饼状图这个和原先的使用一样,只不过增加了一个动画,可以参看之前的文章,饼状图使用。
2。水平多柱状图
2.1 xml布局
& lt; wellijohn.org.varchart.hor_bar_with_line_chart.ChartLine android: id=癅 + id/chartline” android: layout_width=" wrap_content " android: layout_height=" wrap_content " android:背景=" @color/白” 应用:default_x_visible_num=" 4.2 "//一个屏幕中显示多少列 应用:y_interval=" 40 dp”//Y轴的间距 应用:y_num_text_max_width=" 56 dp "//y轴左边的文字的宽度/祝辞
还有y_visible_num: y轴需要显示几列
2.2数据设置
公开课HorBarActivity延伸AppCompatActivity {//显示的坐标点 私人ChartLine mChartline;//多条折线的坐标点 私人List比;mMulListDisDots;//x轴的点 私人String [] mXdots=new String [] {“08/18” “08/19”, “08/20”,“08/21”,“08/22”,“08/23”,“08/24”, “08/25”,“08/26”,“08/27”,“08/28”,“08/29”,“09/01”,“09/02”,“09/23”, }; 私人双mMax=44; 私人随机兰德=new随机(); 私人List
mCategoryList; @Override 保护空白> & lt; wellijohn.org.varchart.overlay_bar_with_line_chart.OverLayBarChartLine android: id=癅 + id/overlay_chart_line” android: layout_width=" wrap_content " android: layout_height=" wrap_content " android:背景=" @color/白” android:可见性=翱杉? 应用:overlay_default_x_visible_num=" 4.2 " 应用:overlay_y_interval=" 40 dp” 应用:overlay_y_num_text_max_width=?6 dp/祝辞
3.2数据设置,如2.2一样
4.1宽度需要重写,onMeasure,因为的控件的宽度是大于屏幕的宽度的,宽度是根据显示的x轴的点和间距,以及y轴坐标的文字的所占的宽度的距离所组成。
int widthParentMeasureMode=MeasureSpec.getMode (widthMeasureSpec); int widthParentMeasureSize=MeasureSpec.getSize (widthMeasureSpec); int heightParentMeasureMode=MeasureSpec.getMode (heightMeasureSpec); int heightParentMeasureSize=MeasureSpec.getSize (heightMeasureSpec); int resultWidthSize=0; int resultHeightSize=0; int resultWidthMode=MeasureSpec.EXACTLY;//用来对childView进行计算的 int resultHeightMode=MeasureSpec.EXACTLY; int paddingWidth=getPaddingLeft () + getPaddingRight (); int paddingHeight=getPaddingTop () + getPaddingBottom (); ViewGroup。LayoutParams thisLp=getLayoutParams (); 开关(widthParentMeasureMode) {//父类不加限制给子类 案例MeasureSpec.UNSPECIFIED://这个代表在布局写死了宽度 如果(thisLp。宽度比;0){ resultWidthSize=thisLp.width; resultWidthMode=MeasureSpec.EXACTLY; 其他}{ resultWidthSize=(int) (getYMaxTextWidth () + mXinterval * mXdots.length); resultWidthMode=MeasureSpec.UNSPECIFIED; } 打破; 案例MeasureSpec.AT_MOST://这个代表在布局写死了宽度 如果(thisLp。宽度比;0){ resultWidthSize=thisLp.width; resultWidthMode=MeasureSpec.EXACTLY; 如果(thisLp}其他。宽度==ViewGroup.LayoutParams.MATCH_PARENT) { resultWidthSize=数学。马克斯(0,widthParentMeasureSize paddingWidth); resultWidthMode=MeasureSpec.AT_MOST; 如果(thisLp}其他。宽度==ViewGroup.LayoutParams.WRAP_CONTENT) { resultWidthSize=(int) (getYMaxTextWidth () + mXinterval * mXdots.length); resultWidthMode=MeasureSpec.AT_MOST; } 打破; 案例MeasureSpec.EXACTLY://这个代表在布局写死了宽度 如果(thisLp。宽度比;0){ resultWidthSize=数学。min (widthParentMeasureSize thisLp.width); resultWidthMode=MeasureSpec.EXACTLY; 如果(thisLp}其他。宽度==ViewGroup.LayoutParams.MATCH_PARENT) { resultWidthSize=widthParentMeasureSize; resultWidthMode=MeasureSpec.EXACTLY; 如果(thisLp}其他。宽度==ViewGroup.LayoutParams.WRAP_CONTENT) { resultWidthSize=(int) (getYMaxTextWidth () + mXinterval * mXdots.length); resultWidthMode=MeasureSpec.AT_MOST; } 打破; } setMeasuredDimension (MeasureSpec。makeMeasureSpec (resultWidthSize resultWidthMode), MeasureSpec。makeMeasureSpec (resultHeightSize resultHeightMode));Android实现简易的柱状图和曲线图表实例代码