package com.xxmassdeveloper.mpchartexample.view;
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.github.mikephil.charting.animation.Easing;
import com.github.mikephil.charting.charts.RadarChart;
import com.github.mikephil.charting.components.AxisBase;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.MarkerView;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.RadarData;
import com.github.mikephil.charting.data.RadarDataSet;
import com.github.mikephil.charting.data.RadarEntry;
import com.github.mikephil.charting.formatter.IAxisValueFormatter;
import com.github.mikephil.charting.interfaces.datasets.IDataSet;
import com.github.mikephil.charting.interfaces.datasets.IRadarDataSet;
import com.xxmassdeveloper.mpchartexample.R;
import com.xxmassdeveloper.mpchartexample.custom.RadarMarkerView;
import java.util.ArrayList;
/**
* @Info 雷达图
* @Auth Bello
* @Time 18-3-5 上午9:53
* @Ver
*/
public class MyRadarChart extends RelativeLayout {
private Context context;
private TextView titleText, unitText;
private CheckBox showBtn;
//图形控件
private RadarChart mChart;
//X轴显示的文字
private String[] quarters ;
//线图数据
private ArrayList<RadarEntry> radarEntries1 = new ArrayList<>();
private ArrayList<RadarEntry> radarEntries2 = new ArrayList<>();
public MyRadarChart(Context context) {
super(context);
initView(context);
}
public MyRadarChart(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context);
}
/**
* 加载UI布局
* @param context
*/
private void initView(Context context){
this.context = context;
View.inflate(context, R.layout.lt_my_radar, this);
titleText = this.findViewById(R.id.chart_title_text);
unitText = this.findViewById(R.id.chart_unit_text);
showBtn = this.findViewById(R.id.chart_show_text);
showBtn.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
for (IDataSet set : mChart.getData().getDataSets()) {
set.setDrawValues(!set.isDrawValuesEnabled());
}
mChart.invalidate();
}
});
mChart = this.findViewById(R.id.chart_radar);
}
/**
* 加载数据
* @param chartName
* @param legend1
* @param legend2
* @param leftYUnit
* @param quarters
* @param radarEntries1
* @param radarEntries2
*/
public void setData(String chartName, String legend1, String legend2, String leftYUnit, String[] quarters, ArrayList<RadarEntry>
radarEntries1, ArrayList<RadarEntry> radarEntries2) {
this.quarters = quarters;
this.radarEntries1 = radarEntries1;
this.radarEntries2 = radarEntries2;
//显示表的名称
titleText.setText(chartName);
//单位
unitText.setText(leftYUnit);
loadChart();
loadData(legend1, legend2);
}
/**
* 设置图形参数
*/
private void loadChart() {
mChart.setBackgroundColor(Color.WHITE);
mChart.getDescription().setEnabled(false);
mChart.setWebLineWidth(0.5f);
mChart.setWebColor(Color.parseColor("#f7d4c9"));
mChart.setWebLineWidthInner(1f);
mChart.setWebColorInner(Color.parseColor("#f7d4c9"));
mChart.setWebAlpha(100);
// create a custom MarkerView (extend MarkerView) and specify the layout
// to use for it
MarkerView mv = new RadarMarkerView(context, R.layout.custom_marker_view);
mv.setChartView(mChart); // For bounds control
// mChart.setMarker(mv); // Set the marker to the chart
mChart.animateXY(
1400, 1400,
Easing.EasingOption.EaseInOutQuad,
Easing.EasingOption.EaseInOutQuad);
XAxis xAxis = mChart.getXAxis();
xAxis.setTextSize(9f);
xAxis.setXAxisBackground(MyChartColorTheme.RED_COLOR);
xAxis.setYOffset(10f);
xAxis.setXOffset(10f);
xAxis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
return MyRadarChart.this.quarters[(int) value % MyRadarChart.this.quarters.length];
}
});
xAxis.setTextColor(Color.WHITE);
YAxis yAxis = mChart.getYAxis();
// yAxis.setLabelCount(5, false);
yAxis.setTextSize(8f);
yAxis.setTextColor(Color.parseColor("#888888"));
yAxis.setAxisMinimum(0f);
// yAxis.setAxisMaximum(5f);
yAxis.setDrawLabels(true);
Legend l = mChart.getLegend();
l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);
l.setOrientation(Legend.LegendOrientation.VERTICAL);
l.setDrawInside(false);
l.setXEntrySpace(7f);
l.setYEntrySpace(5f);
l.setTextColor(Color.parseColor("#888888"));
}
/**
* 加载图形数据
*
* @param legend1
* @param legend2
*/
private void loadData(String legend1, String legend2) {
ArrayList<IRadarDataSet> sets = new ArrayList<>();
if (null != radarEntries1) {
RadarDataSet set1 = new RadarDataSet(radarEntries1, legend1);
set1.setColor(MyChartColorTheme.TGAY_COLOR);
set1.setFillColor(MyChartColorTheme.TGAY_COLOR);
set1.setDrawFilled(true);
set1.setFillAlpha(100);
set1.setLineWidth(0.2f);
set1.setDrawHighlightCircleEnabled(true);
set1.setDrawHighlightIndicators(false);
sets.add(set1);
}
if (null != radarEntries2) {
RadarDataSet set2 = new RadarDataSet(radarEntries2, legend2);
set2.setColor(MyChartColorTheme.RED_COLOR);
set2.setFillColor(MyChartColorTheme.RED_COLOR);
set2.setDrawFilled(true);
set2.setFillAlpha(100);
set2.setLineWidth(0.2f);
set2.setDrawHighlightCircleEnabled(true);
set2.setDrawHighlightIndicators(false);
sets.add(set2);
}
RadarData data = new RadarData(sets);
data.setValueTextSize(8f);
data.setDrawValues(false);
data.setValueTextColor(Color.parseColor("#FF6633"));
mChart.setData(data);
mChart.invalidate();
}
}