java horizontalbarchart_Android-MPChart,HorizontalBarChart 水平柱状图颜色渐变

1.新建color.xml文件,在res/values路径下新建color.xml文件

文件内容:

#ffcc0000

#ff00ddff

2. 在java代码中设置颜色

//1. 找到定义的2个颜色//底部渐变色

int bottomColor = ContextCompat.getColor(this, R.color.color1);//顶部渐变色

int topColor = ContextCompat.getColor(this, R.color.color2);//2. 新建List存储渐变色

List gradientColors = new ArrayList<>();

gradientColors.add(newGradientColor(bottomColor, topColor));//3. 添加颜色List到BarDataSet//set类型是BarDataSet

set.setGradientColors(gradientColors);

4.继承HorizontalBarChart写一个新类,命名为MyHorizontalBarChart

import android.content.Context;

import android.util.AttributeSet;

import com.github.mikephil.charting.charts.HorizontalBarChart;

public class MyHorizontalBarChart extends HorizontalBarChart {

public MyHorizontalBarChart(Context context) {

super(context);

}

public MyHorizontalBarChart(Context context, AttributeSet attrs) {

super(context, attrs);

}

public MyHorizontalBarChart(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

}

@Override

protected void init() {

super.init();

this.mRenderer = new MyHorizontalBarChartRenderer(this, this.mAnimator, this.mViewPortHandler);

}

}

5.继承HorizontalBarChartRenderer写一个新的渲染器,调整为水平颜色渐变

import android.graphics.Canvas;

import android.graphics.LinearGradient;

import android.graphics.RectF;

import com.github.mikephil.charting.animation.ChartAnimator;

import com.github.mikephil.charting.buffer.BarBuffer;

import com.github.mikephil.charting.data.BarData;

import com.github.mikephil.charting.data.BarEntry;

import com.github.mikephil.charting.interfaces.dataprovider.BarDataProvider;

import com.github.mikephil.charting.interfaces.datasets.IBarDataSet;

import com.github.mikephil.charting.model.GradientColor;

import com.github.mikephil.charting.renderer.HorizontalBarChartRenderer;

import com.github.mikephil.charting.utils.Transformer;

import com.github.mikephil.charting.utils.Utils;

import com.github.mikephil.charting.utils.ViewPortHandler;

public class MyHorizontalBarChartRenderer extends HorizontalBarChartRenderer {

public MyHorizontalBarChartRenderer(BarDataProvider chart, ChartAnimator animator, ViewPortHandler viewPortHandler) {

super(chart, animator, viewPortHandler);

}

private RectF mBarShadowRectBuffer = new RectF();

@Override

protected void drawDataSet(Canvas c, IBarDataSet dataSet, int index) {

super.drawDataSet(c, dataSet, index);

Transformer trans = mChart.getTransformer(dataSet.getAxisDependency());

mBarBorderPaint.setColor(dataSet.getBarBorderColor());

mBarBorderPaint.setStrokeWidth(Utils.convertDpToPixel(dataSet.getBarBorderWidth()));

final boolean drawBorder = dataSet.getBarBorderWidth() > 0.f;

float phaseX = mAnimator.getPhaseX();

float phaseY = mAnimator.getPhaseY();

// draw the bar shadow before the values

if (mChart.isDrawBarShadowEnabled()) {

mShadowPaint.setColor(dataSet.getBarShadowColor());

BarData barData = mChart.getBarData();

final float barWidth = barData.getBarWidth();

final float barWidthHalf = barWidth / 2.0f;

float x;

for (int i = 0, count = Math.min((int)(Math.ceil((float)(dataSet.getEntryCount()) * phaseX)), dataSet.getEntryCount());

i < count;

i++) {

BarEntry e = dataSet.getEntryForIndex(i);

x = e.getX();

mBarShadowRectBuffer.left = x - barWidthHalf;

mBarShadowRectBuffer.right = x + barWidthHalf;

trans.rectValueToPixel(mBarShadowRectBuffer);

if (!mViewPortHandler.isInBoundsLeft(mBarShadowRectBuffer.right))

continue;

if (!mViewPortHandler.isInBoundsRight(mBarShadowRectBuffer.left))

break;

mBarShadowRectBuffer.top = mViewPortHandler.contentTop();

mBarShadowRectBuffer.bottom = mViewPortHandler.contentBottom();

c.drawRect(mBarShadowRectBuffer, mShadowPaint);

}

}

// initialize the buffer

BarBuffer buffer = mBarBuffers[index];

buffer.setPhases(phaseX, phaseY);

buffer.setDataSet(index);

buffer.setInverted(mChart.isInverted(dataSet.getAxisDependency()));

buffer.setBarWidth(mChart.getBarData().getBarWidth());

buffer.feed(dataSet);

trans.pointValuesToPixel(buffer.buffer);

final boolean isSingleColor = dataSet.getColors().size() == 1;

if (isSingleColor) {

mRenderPaint.setColor(dataSet.getColor());

}

for (int j = 0; j < buffer.size(); j += 4) {

if (!mViewPortHandler.isInBoundsLeft(buffer.buffer[j + 2]))

continue;

if (!mViewPortHandler.isInBoundsRight(buffer.buffer[j]))

break;

if (!isSingleColor) {

// Set the color for the currently drawn value. If the index

// is out of bounds, reuse colors.

mRenderPaint.setColor(dataSet.getColor(j / 4));

}

if (dataSet.getGradientColor() != null) {

GradientColor gradientColor = dataSet.getGradientColor();

mRenderPaint.setShader(

new LinearGradient(

buffer.buffer[j],

buffer.buffer[j + 3],

buffer.buffer[j],

buffer.buffer[j + 1],

gradientColor.getStartColor(),

gradientColor.getEndColor(),

android.graphics.Shader.TileMode.MIRROR));

}

if (dataSet.getGradientColors() != null) {

mRenderPaint.setShader(

new LinearGradient(

buffer.buffer[j],

buffer.buffer[j+3],

buffer.buffer[j+2],

buffer.buffer[j+1],

dataSet.getGradientColor(j / 4).getEndColor(),

dataSet.getGradientColor(j / 4).getStartColor(),

android.graphics.Shader.TileMode.MIRROR));

}

c.drawRect(buffer.buffer[j], buffer.buffer[j + 1], buffer.buffer[j + 2],

buffer.buffer[j + 3], mRenderPaint);

if (drawBorder) {

c.drawRect(buffer.buffer[j], buffer.buffer[j + 1], buffer.buffer[j + 2],

buffer.buffer[j + 3], mBarBorderPaint);

}

}

}

}

6. 在layout文件中添加自定义的MyHorizontalBarChart

android:id="@+id/bar_chart1"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginLeft="20dp"android:layout_gravity="left|center_vertical">

其他代码按照官方样例正常写既可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值