正在查看: 自健身 v3.3.4 应用的 LineChartRenderer.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
正在查看: 自健身 v3.3.4 应用的 LineChartRenderer.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
package com.github.mikephil.charting.renderer;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.drawable.Drawable;
import com.github.mikephil.charting.animation.ChartAnimator;
import com.github.mikephil.charting.data.BaseEntry;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.formatter.ValueFormatter;
import com.github.mikephil.charting.highlight.Highlight;
import com.github.mikephil.charting.interfaces.dataprovider.LineDataProvider;
import com.github.mikephil.charting.interfaces.datasets.IDataSet;
import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
import com.github.mikephil.charting.renderer.BarLineScatterCandleBubbleRenderer;
import com.github.mikephil.charting.utils.MPPointD;
import com.github.mikephil.charting.utils.MPPointF;
import com.github.mikephil.charting.utils.Transformer;
import com.github.mikephil.charting.utils.Utils;
import com.github.mikephil.charting.utils.ViewPortHandler;
import java.lang.ref.WeakReference;
import java.util.HashMap;
import java.util.List;
public class LineChartRenderer extends LineRadarRenderer {
protected Path cubicFillPath;
protected Path cubicPath;
protected Canvas mBitmapCanvas;
protected Bitmap.Config mBitmapConfig;
protected LineDataProvider mChart;
protected Paint mCirclePaintInner;
private float[] mCirclesBuffer;
protected WeakReference<Bitmap> mDrawBitmap;
protected Path mGenerateFilledPathBuffer;
private HashMap<IDataSet, DataSetImageCache> mImageCaches;
private float[] mLineBuffer;
@Override
public void initBuffers() {
}
public LineChartRenderer(LineDataProvider lineDataProvider, ChartAnimator chartAnimator, ViewPortHandler viewPortHandler) {
super(chartAnimator, viewPortHandler);
this.mBitmapConfig = Bitmap.Config.ARGB_8888;
this.cubicPath = new Path();
this.cubicFillPath = new Path();
this.mLineBuffer = new float[4];
this.mGenerateFilledPathBuffer = new Path();
this.mImageCaches = new HashMap<>();
this.mCirclesBuffer = new float[2];
this.mChart = lineDataProvider;
Paint paint = new Paint(1);
this.mCirclePaintInner = paint;
paint.setStyle(Paint.Style.FILL);
this.mCirclePaintInner.setColor(-1);
}
@Override
public void drawData(Canvas canvas) {
int chartWidth = (int) this.mViewPortHandler.getChartWidth();
int chartHeight = (int) this.mViewPortHandler.getChartHeight();
WeakReference<Bitmap> weakReference = this.mDrawBitmap;
Bitmap bitmap = weakReference == null ? null : weakReference.get();
if (bitmap == null || bitmap.getWidth() != chartWidth || bitmap.getHeight() != chartHeight) {
if (chartWidth <= 0 || chartHeight <= 0) {
return;
}
bitmap = Bitmap.createBitmap(chartWidth, chartHeight, this.mBitmapConfig);
this.mDrawBitmap = new WeakReference<>(bitmap);
this.mBitmapCanvas = new Canvas(bitmap);
}
bitmap.eraseColor(0);
for (T t : this.mChart.getLineData().getDataSets()) {
if (t.isVisible()) {
drawDataSet(canvas, t);
}
}
canvas.drawBitmap(bitmap, 0.0f, 0.0f, this.mRenderPaint);
}
protected void drawDataSet(Canvas canvas, ILineDataSet iLineDataSet) {
if (iLineDataSet.getEntryCount() < 1) {
return;
}
this.mRenderPaint.setStrokeWidth(iLineDataSet.getLineWidth());
this.mRenderPaint.setPathEffect(iLineDataSet.getDashPathEffect());
int i = AnonymousClass1.$SwitchMap$com$github$mikephil$charting$data$LineDataSet$Mode[iLineDataSet.getMode().ordinal()];
if (i == 3) {
drawCubicBezier(iLineDataSet);
} else if (i != 4) {
drawLinear(canvas, iLineDataSet);
} else {
drawHorizontalBezier(iLineDataSet);
}
this.mRenderPaint.setPathEffect(null);
}
static class AnonymousClass1 {
static final int[] $SwitchMap$com$github$mikephil$charting$data$LineDataSet$Mode;
static {
int[] iArr = new int[LineDataSet.Mode.values().length];
$SwitchMap$com$github$mikephil$charting$data$LineDataSet$Mode = iArr;
try {
iArr[LineDataSet.Mode.LINEAR.ordinal()] = 1;
} catch (NoSuchFieldError unused) {
}
try {
$SwitchMap$com$github$mikephil$charting$data$LineDataSet$Mode[LineDataSet.Mode.STEPPED.ordinal()] = 2;
} catch (NoSuchFieldError unused2) {
}
try {
$SwitchMap$com$github$mikephil$charting$data$LineDataSet$Mode[LineDataSet.Mode.CUBIC_BEZIER.ordinal()] = 3;
} catch (NoSuchFieldError unused3) {
}
try {
$SwitchMap$com$github$mikephil$charting$data$LineDataSet$Mode[LineDataSet.Mode.HORIZONTAL_BEZIER.ordinal()] = 4;
} catch (NoSuchFieldError unused4) {
}
}
}
protected void drawHorizontalBezier(ILineDataSet iLineDataSet) {
float phaseY = this.mAnimator.getPhaseY();
Transformer transformer = this.mChart.getTransformer(iLineDataSet.getAxisDependency());
this.mXBounds.set(this.mChart, iLineDataSet);
this.cubicPath.reset();
if (this.mXBounds.range >= 1) {
?? entryForIndex = iLineDataSet.getEntryForIndex(this.mXBounds.min);
this.cubicPath.moveTo(entryForIndex.getX(), entryForIndex.getY() * phaseY);
int i = this.mXBounds.min + 1;
Entry entry = entryForIndex;
while (i <= this.mXBounds.range + this.mXBounds.min) {
?? entryForIndex2 = iLineDataSet.getEntryForIndex(i);
float x = entry.getX() + ((entryForIndex2.getX() - entry.getX()) / 2.0f);
this.cubicPath.cubicTo(x, entry.getY() * phaseY, x, entryForIndex2.getY() * phaseY, entryForIndex2.getX(), entryForIndex2.getY() * phaseY);
i++;
entry = entryForIndex2;
}
}
if (iLineDataSet.isDrawFilledEnabled()) {
this.cubicFillPath.reset();
this.cubicFillPath.addPath(this.cubicPath);
drawCubicFill(this.mBitmapCanvas, iLineDataSet, this.cubicFillPath, transformer, this.mXBounds);
}
this.mRenderPaint.setColor(iLineDataSet.getColor());
this.mRenderPaint.setStyle(Paint.Style.STROKE);
transformer.pathValueToPixel(this.cubicPath);
this.mBitmapCanvas.drawPath(this.cubicPath, this.mRenderPaint);
this.mRenderPaint.setPathEffect(null);
}
protected void drawCubicBezier(ILineDataSet iLineDataSet) {
float phaseY = this.mAnimator.getPhaseY();
Transformer transformer = this.mChart.getTransformer(iLineDataSet.getAxisDependency());
this.mXBounds.set(this.mChart, iLineDataSet);
float cubicIntensity = iLineDataSet.getCubicIntensity();
this.cubicPath.reset();
if (this.mXBounds.range >= 1) {
int i = this.mXBounds.min + 1;
int i2 = this.mXBounds.min;
int i3 = this.mXBounds.range;
T entryForIndex = iLineDataSet.getEntryForIndex(Math.max(i - 2, 0));
?? entryForIndex2 = iLineDataSet.getEntryForIndex(Math.max(i - 1, 0));
int i4 = -1;
if (entryForIndex2 != 0) {
this.cubicPath.moveTo(entryForIndex2.getX(), entryForIndex2.getY() * phaseY);
int i5 = this.mXBounds.min + 1;
Entry entry = entryForIndex2;
Entry entry2 = entryForIndex2;
Entry entry3 = entryForIndex;
while (true) {
Entry entry4 = entry2;
if (i5 > this.mXBounds.range + this.mXBounds.min) {
break;
}
if (i4 != i5) {
entry4 = iLineDataSet.getEntryForIndex(i5);
}
int i6 = i5 + 1;
if (i6 < iLineDataSet.getEntryCount()) {
i5 = i6;
}
?? entryForIndex3 = iLineDataSet.getEntryForIndex(i5);
this.cubicPath.cubicTo(entry.getX() + ((entry4.getX() - entry3.getX()) * cubicIntensity), (entry.getY() + ((entry4.getY() - entry3.getY()) * cubicIntensity)) * phaseY, entry4.getX() - ((entryForIndex3.getX() - entry.getX()) * cubicIntensity), (entry4.getY() - ((entryForIndex3.getY() - entry.getY()) * cubicIntensity)) * phaseY, entry4.getX(), entry4.getY() * phaseY);
entry3 = entry;
entry = entry4;
entry2 = entryForIndex3;
int i7 = i5;
i5 = i6;
i4 = i7;
}
} else {
return;
}
}
if (iLineDataSet.isDrawFilledEnabled()) {
this.cubicFillPath.reset();
this.cubicFillPath.addPath(this.cubicPath);
drawCubicFill(this.mBitmapCanvas, iLineDataSet, this.cubicFillPath, transformer, this.mXBounds);
}
this.mRenderPaint.setColor(iLineDataSet.getColor());
this.mRenderPaint.setStyle(Paint.Style.STROKE);
transformer.pathValueToPixel(this.cubicPath);
this.mBitmapCanvas.drawPath(this.cubicPath, this.mRenderPaint);
this.mRenderPaint.setPathEffect(null);
}
protected void drawCubicFill(Canvas canvas, ILineDataSet iLineDataSet, Path path, Transformer transformer, BarLineScatterCandleBubbleRenderer.XBounds xBounds) {
float fillLinePosition = iLineDataSet.getFillFormatter().getFillLinePosition(iLineDataSet, this.mChart);
path.lineTo(iLineDataSet.getEntryForIndex(xBounds.min + xBounds.range).getX(), fillLinePosition);
path.lineTo(iLineDataSet.getEntryForIndex(xBounds.min).getX(), fillLinePosition);
path.close();
transformer.pathValueToPixel(path);
Drawable fillDrawable = iLineDataSet.getFillDrawable();
if (fillDrawable != null) {
drawFilledPath(canvas, path, fillDrawable);
} else {
drawFilledPath(canvas, path, iLineDataSet.getFillColor(), iLineDataSet.getFillAlpha());
}
}
protected void drawLinear(Canvas canvas, ILineDataSet iLineDataSet) {
int entryCount = iLineDataSet.getEntryCount();
boolean z = iLineDataSet.getMode() == LineDataSet.Mode.STEPPED;
int i = z ? 4 : 2;
Transformer transformer = this.mChart.getTransformer(iLineDataSet.getAxisDependency());
float phaseY = this.mAnimator.getPhaseY();
this.mRenderPaint.setStyle(Paint.Style.STROKE);
Canvas canvas2 = iLineDataSet.isDashedLineEnabled() ? this.mBitmapCanvas : canvas;
this.mXBounds.set(this.mChart, iLineDataSet);
if (iLineDataSet.isDrawFilledEnabled() && entryCount > 0) {
drawLinearFill(canvas, iLineDataSet, transformer, this.mXBounds);
}
if (iLineDataSet.getColors().size() > 1) {
int i2 = i * 2;
if (this.mLineBuffer.length <= i2) {
this.mLineBuffer = new float[i * 4];
}
for (int i3 = this.mXBounds.min; i3 <= this.mXBounds.range + this.mXBounds.min; i3++) {
?? entryForIndex = iLineDataSet.getEntryForIndex(i3);
if (entryForIndex != 0) {
this.mLineBuffer[0] = entryForIndex.getX();
this.mLineBuffer[1] = entryForIndex.getY() * phaseY;
if (i3 < this.mXBounds.max) {
?? entryForIndex2 = iLineDataSet.getEntryForIndex(i3 + 1);
if (entryForIndex2 == 0) {
break;
}
if (z) {
this.mLineBuffer[2] = entryForIndex2.getX();
float[] fArr = this.mLineBuffer;
fArr[3] = fArr[1];
fArr[4] = fArr[2];
fArr[5] = fArr[3];
fArr[6] = entryForIndex2.getX();
this.mLineBuffer[7] = entryForIndex2.getY() * phaseY;
} else {
this.mLineBuffer[2] = entryForIndex2.getX();
this.mLineBuffer[3] = entryForIndex2.getY() * phaseY;
}
} else {
float[] fArr2 = this.mLineBuffer;
fArr2[2] = fArr2[0];
fArr2[3] = fArr2[1];
}
transformer.pointValuesToPixel(this.mLineBuffer);
if (!this.mViewPortHandler.isInBoundsRight(this.mLineBuffer[0])) {
break;
}
if (this.mViewPortHandler.isInBoundsLeft(this.mLineBuffer[2]) && (this.mViewPortHandler.isInBoundsTop(this.mLineBuffer[1]) || this.mViewPortHandler.isInBoundsBottom(this.mLineBuffer[3]))) {
this.mRenderPaint.setColor(iLineDataSet.getColor(i3));
canvas2.drawLines(this.mLineBuffer, 0, i2, this.mRenderPaint);
}
}
}
} else {
int i4 = entryCount * i;
if (this.mLineBuffer.length < Math.max(i4, i) * 2) {
this.mLineBuffer = new float[Math.max(i4, i) * 4];
}
if (iLineDataSet.getEntryForIndex(this.mXBounds.min) != 0) {
int i5 = this.mXBounds.min;
int i6 = 0;
while (i5 <= this.mXBounds.range + this.mXBounds.min) {
?? entryForIndex3 = iLineDataSet.getEntryForIndex(i5 == 0 ? 0 : i5 - 1);
?? entryForIndex4 = iLineDataSet.getEntryForIndex(i5);
if (entryForIndex3 != 0 && entryForIndex4 != 0) {
int i7 = i6 + 1;
this.mLineBuffer[i6] = entryForIndex3.getX();
int i8 = i7 + 1;
this.mLineBuffer[i7] = entryForIndex3.getY() * phaseY;
if (z) {
int i9 = i8 + 1;
this.mLineBuffer[i8] = entryForIndex4.getX();
int i10 = i9 + 1;
this.mLineBuffer[i9] = entryForIndex3.getY() * phaseY;
int i11 = i10 + 1;
this.mLineBuffer[i10] = entryForIndex4.getX();
i8 = i11 + 1;
this.mLineBuffer[i11] = entryForIndex3.getY() * phaseY;
}
int i12 = i8 + 1;
this.mLineBuffer[i8] = entryForIndex4.getX();
this.mLineBuffer[i12] = entryForIndex4.getY() * phaseY;
i6 = i12 + 1;
}
i5++;
}
if (i6 > 0) {
transformer.pointValuesToPixel(this.mLineBuffer);
int max = Math.max((this.mXBounds.range + 1) * i, i) * 2;
this.mRenderPaint.setColor(iLineDataSet.getColor());
canvas2.drawLines(this.mLineBuffer, 0, max, this.mRenderPaint);
}
}
}
this.mRenderPaint.setPathEffect(null);
}
protected void drawLinearFill(Canvas canvas, ILineDataSet iLineDataSet, Transformer transformer, BarLineScatterCandleBubbleRenderer.XBounds xBounds) {
int i;
int i2;
Path path = this.mGenerateFilledPathBuffer;
int i3 = xBounds.min;
int i4 = xBounds.range + xBounds.min;
int i5 = 0;
do {
i = (i5 * 128) + i3;
i2 = i + 128;
if (i2 > i4) {
i2 = i4;
}
if (i <= i2) {
generateFilledPath(iLineDataSet, i, i2, path);
transformer.pathValueToPixel(path);
Drawable fillDrawable = iLineDataSet.getFillDrawable();
if (fillDrawable != null) {
drawFilledPath(canvas, path, fillDrawable);
} else {
drawFilledPath(canvas, path, iLineDataSet.getFillColor(), iLineDataSet.getFillAlpha());
}
}
i5++;
} while (i <= i2);
}
private void generateFilledPath(ILineDataSet iLineDataSet, int i, int i2, Path path) {
float fillLinePosition = iLineDataSet.getFillFormatter().getFillLinePosition(iLineDataSet, this.mChart);
float phaseY = this.mAnimator.getPhaseY();
boolean z = iLineDataSet.getMode() == LineDataSet.Mode.STEPPED;
path.reset();
?? entryForIndex = iLineDataSet.getEntryForIndex(i);
path.moveTo(entryForIndex.getX(), fillLinePosition);
path.lineTo(entryForIndex.getX(), entryForIndex.getY() * phaseY);
Entry entry = null;
int i3 = i + 1;
BaseEntry baseEntry = entryForIndex;
while (i3 <= i2) {
?? entryForIndex2 = iLineDataSet.getEntryForIndex(i3);
if (z) {
path.lineTo(entryForIndex2.getX(), baseEntry.getY() * phaseY);
}
path.lineTo(entryForIndex2.getX(), entryForIndex2.getY() * phaseY);
i3++;
baseEntry = entryForIndex2;
entry = entryForIndex2;
}
if (entry != null) {
path.lineTo(entry.getX(), fillLinePosition);
}
path.close();
}
@Override
public void drawValues(Canvas canvas) {
int i;
ILineDataSet iLineDataSet;
Entry entry;
if (isDrawingValuesAllowed(this.mChart)) {
List<T> dataSets = this.mChart.getLineData().getDataSets();
for (int i2 = 0; i2 < dataSets.size(); i2++) {
ILineDataSet iLineDataSet2 = (ILineDataSet) dataSets.get(i2);
if (shouldDrawValues(iLineDataSet2) && iLineDataSet2.getEntryCount() >= 1) {
applyValueTextStyle(iLineDataSet2);
Transformer transformer = this.mChart.getTransformer(iLineDataSet2.getAxisDependency());
int circleRadius = (int) (iLineDataSet2.getCircleRadius() * 1.75f);
if (!iLineDataSet2.isDrawCirclesEnabled()) {
circleRadius /= 2;
}
int i3 = circleRadius;
this.mXBounds.set(this.mChart, iLineDataSet2);
float[] generateTransformedValuesLine = transformer.generateTransformedValuesLine(iLineDataSet2, this.mAnimator.getPhaseX(), this.mAnimator.getPhaseY(), this.mXBounds.min, this.mXBounds.max);
ValueFormatter valueFormatter = iLineDataSet2.getValueFormatter();
MPPointF mPPointF = MPPointF.getInstance(iLineDataSet2.getIconsOffset());
mPPointF.x = Utils.convertDpToPixel(mPPointF.x);
mPPointF.y = Utils.convertDpToPixel(mPPointF.y);
int i4 = 0;
while (i4 < generateTransformedValuesLine.length) {
float f = generateTransformedValuesLine[i4];
float f2 = generateTransformedValuesLine[i4 + 1];
if (!this.mViewPortHandler.isInBoundsRight(f)) {
break;
}
if (this.mViewPortHandler.isInBoundsLeft(f) && this.mViewPortHandler.isInBoundsY(f2)) {
int i5 = i4 / 2;
Entry entryForIndex = iLineDataSet2.getEntryForIndex(this.mXBounds.min + i5);
if (iLineDataSet2.isDrawValuesEnabled()) {
entry = entryForIndex;
i = i3;
iLineDataSet = iLineDataSet2;
drawValue(canvas, valueFormatter.getPointLabel(entryForIndex), f, f2 - i3, iLineDataSet2.getValueTextColor(i5));
} else {
entry = entryForIndex;
i = i3;
iLineDataSet = iLineDataSet2;
}
if (entry.getIcon() != null && iLineDataSet.isDrawIconsEnabled()) {
Drawable icon = entry.getIcon();
Utils.drawImage(canvas, icon, (int) (f + mPPointF.x), (int) (f2 + mPPointF.y), icon.getIntrinsicWidth(), icon.getIntrinsicHeight());
}
} else {
i = i3;
iLineDataSet = iLineDataSet2;
}
i4 += 2;
iLineDataSet2 = iLineDataSet;
i3 = i;
}
MPPointF.recycleInstance(mPPointF);
}
}
}
}
@Override
public void drawValue(Canvas canvas, String str, float f, float f2, int i) {
this.mValuePaint.setColor(i);
canvas.drawText(str, f, f2, this.mValuePaint);
}
@Override
public void drawExtras(Canvas canvas) {
drawCircles(canvas);
}
protected void drawCircles(Canvas canvas) {
DataSetImageCache dataSetImageCache;
Bitmap bitmap;
this.mRenderPaint.setStyle(Paint.Style.FILL);
float phaseY = this.mAnimator.getPhaseY();
float[] fArr = this.mCirclesBuffer;
char c = 0;
float f = 0.0f;
fArr[0] = 0.0f;
fArr[1] = 0.0f;
List<T> dataSets = this.mChart.getLineData().getDataSets();
int i = 0;
while (i < dataSets.size()) {
ILineDataSet iLineDataSet = (ILineDataSet) dataSets.get(i);
if (iLineDataSet.isVisible() && iLineDataSet.isDrawCirclesEnabled() && iLineDataSet.getEntryCount() != 0) {
this.mCirclePaintInner.setColor(iLineDataSet.getCircleHoleColor());
Transformer transformer = this.mChart.getTransformer(iLineDataSet.getAxisDependency());
this.mXBounds.set(this.mChart, iLineDataSet);
float circleRadius = iLineDataSet.getCircleRadius();
float circleHoleRadius = iLineDataSet.getCircleHoleRadius();
boolean z = iLineDataSet.isDrawCircleHoleEnabled() && circleHoleRadius < circleRadius && circleHoleRadius > f;
boolean z2 = z && iLineDataSet.getCircleHoleColor() == 1122867;
AnonymousClass1 anonymousClass1 = null;
if (this.mImageCaches.containsKey(iLineDataSet)) {
dataSetImageCache = this.mImageCaches.get(iLineDataSet);
} else {
dataSetImageCache = new DataSetImageCache(this, anonymousClass1);
this.mImageCaches.put(iLineDataSet, dataSetImageCache);
}
if (dataSetImageCache.init(iLineDataSet)) {
dataSetImageCache.fill(iLineDataSet, z, z2);
}
int i2 = this.mXBounds.range + this.mXBounds.min;
int i3 = this.mXBounds.min;
while (i3 <= i2) {
?? entryForIndex = iLineDataSet.getEntryForIndex(i3);
if (entryForIndex == 0) {
break;
}
this.mCirclesBuffer[c] = entryForIndex.getX();
this.mCirclesBuffer[1] = entryForIndex.getY() * phaseY;
transformer.pointValuesToPixel(this.mCirclesBuffer);
if (!this.mViewPortHandler.isInBoundsRight(this.mCirclesBuffer[c])) {
break;
}
if (this.mViewPortHandler.isInBoundsLeft(this.mCirclesBuffer[c]) && this.mViewPortHandler.isInBoundsY(this.mCirclesBuffer[1]) && (bitmap = dataSetImageCache.getBitmap(i3)) != null) {
float[] fArr2 = this.mCirclesBuffer;
canvas.drawBitmap(bitmap, fArr2[c] - circleRadius, fArr2[1] - circleRadius, (Paint) null);
}
i3++;
c = 0;
}
}
i++;
c = 0;
f = 0.0f;
}
}
@Override
public void drawHighlighted(Canvas canvas, Highlight[] highlightArr) {
LineData lineData = this.mChart.getLineData();
for (Highlight highlight : highlightArr) {
ILineDataSet iLineDataSet = (ILineDataSet) lineData.getDataSetByIndex(highlight.getDataSetIndex());
if (iLineDataSet != null && iLineDataSet.isHighlightEnabled()) {
?? entryForXValue = iLineDataSet.getEntryForXValue(highlight.getX(), highlight.getY());
if (isInBoundsX(entryForXValue, iLineDataSet)) {
MPPointD pixelForValues = this.mChart.getTransformer(iLineDataSet.getAxisDependency()).getPixelForValues(entryForXValue.getX(), entryForXValue.getY() * this.mAnimator.getPhaseY());
highlight.setDraw((float) pixelForValues.x, (float) pixelForValues.y);
drawHighlightLines(canvas, (float) pixelForValues.x, (float) pixelForValues.y, iLineDataSet);
}
}
}
}
public void setBitmapConfig(Bitmap.Config config) {
this.mBitmapConfig = config;
releaseBitmap();
}
public Bitmap.Config getBitmapConfig() {
return this.mBitmapConfig;
}
public void releaseBitmap() {
Canvas canvas = this.mBitmapCanvas;
if (canvas != null) {
canvas.setBitmap(null);
this.mBitmapCanvas = null;
}
WeakReference<Bitmap> weakReference = this.mDrawBitmap;
if (weakReference != null) {
Bitmap bitmap = weakReference.get();
if (bitmap != null) {
bitmap.recycle();
}
this.mDrawBitmap.clear();
this.mDrawBitmap = null;
}
}
private class DataSetImageCache {
private Bitmap[] circleBitmaps;
private Path mCirclePathBuffer;
private DataSetImageCache() {
this.mCirclePathBuffer = new Path();
}
DataSetImageCache(LineChartRenderer lineChartRenderer, AnonymousClass1 anonymousClass1) {
this();
}
protected boolean init(ILineDataSet iLineDataSet) {
int circleColorCount = iLineDataSet.getCircleColorCount();
Bitmap[] bitmapArr = this.circleBitmaps;
if (bitmapArr == null) {
this.circleBitmaps = new Bitmap[circleColorCount];
return true;
}
if (bitmapArr.length == circleColorCount) {
return false;
}
this.circleBitmaps = new Bitmap[circleColorCount];
return true;
}
protected void fill(ILineDataSet iLineDataSet, boolean z, boolean z2) {
int circleColorCount = iLineDataSet.getCircleColorCount();
float circleRadius = iLineDataSet.getCircleRadius();
float circleHoleRadius = iLineDataSet.getCircleHoleRadius();
for (int i = 0; i < circleColorCount; i++) {
Bitmap.Config config = Bitmap.Config.ARGB_4444;
double d = circleRadius;
Double.isNaN(d);
int i2 = (int) (d * 2.1d);
Bitmap createBitmap = Bitmap.createBitmap(i2, i2, config);
Canvas canvas = new Canvas(createBitmap);
this.circleBitmaps[i] = createBitmap;
LineChartRenderer.this.mRenderPaint.setColor(iLineDataSet.getCircleColor(i));
if (z2) {
this.mCirclePathBuffer.reset();
this.mCirclePathBuffer.addCircle(circleRadius, circleRadius, circleRadius, Path.Direction.CW);
this.mCirclePathBuffer.addCircle(circleRadius, circleRadius, circleHoleRadius, Path.Direction.CCW);
canvas.drawPath(this.mCirclePathBuffer, LineChartRenderer.this.mRenderPaint);
} else {
canvas.drawCircle(circleRadius, circleRadius, circleRadius, LineChartRenderer.this.mRenderPaint);
if (z) {
canvas.drawCircle(circleRadius, circleRadius, circleHoleRadius, LineChartRenderer.this.mCirclePaintInner);
}
}
}
}
protected Bitmap getBitmap(int i) {
Bitmap[] bitmapArr = this.circleBitmaps;
return bitmapArr[i % bitmapArr.length];
}
}
}