Android实现简易的柱状图和曲线图表实例代码

  

  

之前有写过一个图表自由,但是开发的速度,大多很难跟上产品需求变化的脚步,所以修改了下原先的图表库、支持图表下面能整合表显示对应的类目,用曲线替换了折线,支持多曲线的显示,增加了显示的动画,增加了一些可定制的属性,支持水平柱状图和叠加柱状图,以及多曲线图和饼状图的显示,下面话不多说了,来一起看看详细的介绍吧。
  

  

  

 Android实现简易的柱状图和曲线图表实例代码

  


  

  

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随机();   私人ListmCategoryList;   @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实现简易的柱状图和曲线图表实例代码