Android 给AChartEngine绘制的曲线图加渐变色(修改AChartEngine源码)

AChartEngine是一个安卓的图表框架,支持各种图表。以下说的针对曲线图。

百度一通没发现,然后在http://stackoverflow.com/questions/16140546/android-fill-color-below-the-line-chart

上看到有人贴出效果图:代码里面说的我没搞懂。


然后用了另一种思维方式,在曲线图表view的上面加一层渐变色的view。


一:首先下载源码,官网在http://code.google.com/p/achartengine/ 但这个要翻墙。然后我就在github下载了一份别人的copy。实在找不到我最后会贴下我修改后的源码(其实就改了一两个文件)。


二:根据使用Achartengine做平滑曲线图和温度显示柱状图里的demo,画出正常无渐变的曲线图。其中 xyRenderer.setFillBelowLine(true);表示曲线下填充颜色。 


三:修改源码得到渐变色的图:

 修改org.achartengine.chart.CubicLineChart类的drawPath方法:

源代码在最后一句是在画布canvas上画曲线canvas.drawPath(linePath, paint);

那我们在他画完曲线后,在画布canvas加画一个渐变色的矩形去遮盖曲线图。

下面是我多加的代码:(此处可参考Android利用canvas画各种图形 和 Adnroid上的简单图像合成类——PorterDuffXfermode

//多画一个矩形
    Paint p = new Paint();
    LinearGradient lg=new LinearGradient(0,yMin,0,yMax,Color.parseColor("#00ffffff"),Color.parseColor("#BFffffff"),Shader.TileMode.CLAMP);// CLAMP重复最后一个颜色至最后 
    p.setShader(lg);
    p.setXfermode(new PorterDuffXfermode(
    android.graphics.PorterDuff.Mode.SRC_ATOP));
    
    canvas.drawRect(0, yMin, 5000, 5000, p);// 长方形  
    canvas.drawPath(linePath, paint);

注意:此处阴影色都为白色,为什么呢,因为阴影的主色在我们自己项目的代码中设置(项目中的

xyRenderer.setFillBelowLine(true);
xyRenderer.setFillBelowLineColor(Color.parseColor("#3ebdff"));//chart_gradient
)。这边只是加个遮罩效果,只是这个遮罩为渐变的白色(透明)的遮罩罢了。

四:参考 将一个Android的工程打成Jar包 把源码工程打包成jar包,再替换掉步骤二中的代码里的AchartEngine.jar即可。


ps:我修改后的源码地址:http://pan.baidu.com/s/1dDjmZqL

pps:数据要为动态的网络获取的就改步骤二中的代码的drawSingleLine方法中的temperatureLists

效果图大概是这样:



-----------------------------------------------------//以下是修改XY轴样式,跟渐变色无关------------------------------------------------

另外:要修改XY轴的样式在XYChart中的draw方法的464行的if (mRenderer.isShowAxes()) {那边

其中,canvas.drawLine(left, bottom, right, bottom, paint);这句在画x轴线

所以可以看出要改XY轴在canvas这个画布上改。

我改了样式列下代码,有兴趣的看看:

    if (mRenderer.isShowAxes()) {
      paint.setColor(mRenderer.getXAxisColor());
      canvas.drawLine(left, bottom, right+38, bottom, paint);//画x轴线
      //画圆
      Paint p = new Paint();
      p.setColor(Color.parseColor("#78cdf9"));
      p.setAntiAlias(true);// 设置画笔的锯齿效果
      canvas.drawCircle(right+50, bottom, 8, p);
      p.setStyle(Paint.Style.STROKE);//设置空心
      p.setStrokeWidth(2);
      canvas.drawCircle(right+50, bottom, 12, p);
      
      paint.setColor(mRenderer.getYAxisColor());
      boolean rightAxis = false;
      for (int i = 0; i < maxScaleNumber && !rightAxis; i++) {
        rightAxis = mRenderer.getYAxisAlign(i) == Align.RIGHT;
      }
      if (or == Orientation.HORIZONTAL) {
        canvas.drawLine(left, top-38, left, bottom, paint);
      //画圆
        Paint p2 = new Paint();
        p2.setColor(Color.parseColor("#78cdf9"));
        p2.setAntiAlias(true);// 设置画笔的锯齿效果
        canvas.drawCircle(left, top-50, 8, p2);
        p2.setStyle(Paint.Style.STROKE);//设置空心
        p2.setStrokeWidth(2);
        canvas.drawCircle(left, top-50, 12, p2);
        
        if (rightAxis) {
          canvas.drawLine(right, top, right, bottom, paint);
        }
      } else if (or == Orientation.VERTICAL) {
        canvas.drawLine(right, top, right, bottom, paint);
      }
    }




  • 10
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值