当前位置:   article > 正文

hellocharts-android图表库使用详解_com.github.lecho:hellocharts设置网格

com.github.lecho:hellocharts设置网格

本篇博客Demo: http://download.csdn.net/download/g_ying_jie/10135594

感谢XiaRui's的汉化翻译和注解:http://www.iamxiarui.com/2016/09/08/android:一起学会超好用图表控件-hellocharts/?utm_source=tuicool&utm_medium=referral


第一步、gradle集成

compile 'com.github.lecho:hellocharts-library:1.5.8@aar'


@左对齐的横向柱状图


实现方式:不可滑动自适应高度的ListView,动态设置左对齐距离的适配器,具体用法可参考demo的app模块

  1. //查询最长的城市名字段,传递给适配器设定间距
  2. TextView cityTv = (TextView) LayoutInflater.from(this).inflate(R.layout.item_line_char, null).findViewById(R.id.city_name);
  3. String longestStr = "";
  4. for (int i = 0; i < list.size(); i++) {
  5. if (list.get(i).getCityName().length() > longestStr.length()) {
  6. longestStr = list.get(i).getCityName();
  7. }
  8. }
  9. TextPaint textPaint = cityTv.getPaint();
  10. int cityTvWidth = (int) textPaint.measureText(longestStr);
  11. LineCharAdapter adapter = new LineCharAdapter(list, this, screenwidth, cityTvWidth);
  1. //动态设定宽度
  2. LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) xLength.getLayoutParams();
  3. params.width = (screenWidth - cityName.getWidth() - 1 - percent.getWidth()) / 100 * list.get(position).getxLength();
  4. xLength.setLayoutParams(params);

@饼状图,更多用法参照HelloChartsDemo模块的PieChartActivity


设定分离间隔

 mPieChartData.setSlicesSpacing(18);    
单行文本内容

mPieChartData.setCenterText1("Hello");             //文本内容

@折线图,更多用法参照HelloChartsDemo模块的LineChartActivity,比较通用的属性我就不一一罗列了

毫无疑问这个是项目中花费了很多心力的地方,有太多的细节需要调整,网上的资料并不精细,废话不多说下面开始

@空心点的实现,框架的节点样式很少,而且没有空心原点,怎么办?(具体请参考MyLineChartRenderer,这里只讲解实现原理)

private ValueShape pointsShape = ValueShape.CIRCLE; //点的形状(圆/方/菱形)
关注留心源码会发现如下方法,CharRenderer就是负责具体的线和节点绘制的

mLineChartView.setChartRenderer(new MyLineChartRenderer(this, mLineChartView, mLineChartView));
找到了根源现在我们就会想怎么去复写自己的CharRenderer替换掉框架自带的绘制效果

private Paint pointPaint = new Paint();
看到这行代码我们就明白这个画笔是用来绘制节点的,那么我们能不能模仿这个画笔绘制出我们想要的节点呢

private Paint pointStrokePaint = new Paint();
好我们也新建一个画笔,代码往下走,接着模仿pointPaint的属性设置

  1. pointPaint.setAntiAlias(true);
  2. pointPaint.setStyle(Paint.Style.FILL);
  3. pointStrokePaint.setAntiAlias(true);
  4. pointStrokePaint.setColor(Color.WHITE);
  5. pointStrokePaint.setStyle(Paint.Style.FILL);
到此画笔建好了,属性也设置了,接下来看看pointPaint的具体实现
  1. private void drawPoint(Canvas canvas, Line line, PointValue pointValue, float rawX, float rawY,
  2. float pointRadius) {
  3. if (ValueShape.SQUARE.equals(line.getShape())) {
  4. canvas.drawRect(rawX - pointRadius, rawY - pointRadius, rawX + pointRadius, rawY + pointRadius,
  5. pointPaint);
  6. } else if (ValueShape.CIRCLE.equals(line.getShape())) {
  7. canvas.drawCircle(rawX, rawY, pointRadius, pointPaint);
  8. canvas.drawCircle(rawX, rawY, pointRadius - 3, pointStrokePaint);//加入空心坐标描边
  9. } else if (ValueShape.DIAMOND.equals(line.getShape())) {
  10. canvas.save();
  11. canvas.rotate(45, rawX, rawY);
  12. canvas.drawRect(rawX - pointRadius, rawY - pointRadius, rawX + pointRadius, rawY + pointRadius,
  13. pointPaint);
  14. canvas.restore();
  15. } else {
  16. throw new IllegalArgumentException("Invalid point shape: " + line.getShape());
  17. }
  18. }
仔细看这个方法,这里判定了传入的节点样式,然后通过传入的样式判断应该绘制的效果

我们可以在实心圆的上面在绘制一个半径略小的白底实心圆,然后以白色充当整个背景,就营造出了空心圆的效果


@X、Y坐标轴刻度值赋值

  1. Axis axisX = new Axis(); //X轴
  2. Axis axisY = new Axis().setHasLines(true); //Y轴
  3. ArrayList<AxisValue> axisValuesX = new ArrayList<AxisValue>();//定义X轴刻度值的数据集合
  4. for (int i = 0; i < 12; i++) {
  5. String str;
  6. if (i * 2 < 10)
  7. str = "0" + i * 2 + ":00";
  8. else
  9. str = i * 2 + ":00";
  10. axisValuesX.add(new AxisValue(i).setValue(i * 2).setLabel(str));
  11. }
  12. axisX.setValues(axisValuesX);//为X轴显示的刻度值设置数据集合
  13. ArrayList<AxisValue> axisValuesY = new ArrayList<AxisValue>();//定义Y轴刻度值的数据集合
  14. for (int i = 0; i < 8; i++) {
  15. axisValuesY.add(new AxisValue(i).setValue((float) (i * 2.5)).setLabel(i * 2.5 + "K"));
  16. }
  17. axisY.setValues(axisValuesY);
  18. axisX.setTextColor(Color.GRAY); //X轴灰色
  19. axisX.setTextSize(8);
  20. axisY.setTextColor(Color.GRAY); //Y轴灰色
  21. axisY.setTextSize(8);
  22. axisX.setHasLines(true);// 是否显示X轴网格线
  23. axisY.setHasLines(true);// 是否显示Y轴网格线
  24. //setLineColor():此方法是设置图表的网格线颜色 并不是轴本身颜色
  25. mLineData.setAxisXBottom(axisX); //设置X轴位置 下方
  26. mLineData.setAxisYLeft(axisY); //设置Y轴位置 左边
其他属性和详细用法参考demo


剩下的一些图表控件用法有时间研究再来分享,有问题欢迎留言交流


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/254711
推荐阅读
相关标签
  

闽ICP备14008679号