1: 自定义控件
package com.welleplus.yfinspection.formatter;
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.RelativeLayout;
import com.github.mikephil.charting.charts.HorizontalBarChart;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;
import com.github.mikephil.charting.interfaces.datasets.IBarDataSet;
import com.welleplus.yfinspection.R;
import java.util.ArrayList;
import java.util.List;
/**
* Description:
* Author:zhangmengmeng
* Date:2018/2/1
* Time:下午3:44
*/
public class HoroBarView extends RelativeLayout {
private static final String TAG = "HoroBarView";
private HorizontalBarChart mChart;
public HoroBarView(Context context) {
this(context,null);
}
public HoroBarView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public HoroBarView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView();
}
public void initView() {
Log.i(TAG, "initView: -------------初始化");
View view = View.inflate(getContext(), R.layout.item_horo_bar, this);
mChart = view.findViewById(R.id.chart);
}
public void initChartData(List<String> lendata, List<Integer> pnums) {
Log.i(TAG, "initView: -------------初始化数据");
//初始化图表
mChart.setDrawBarShadow(false);
mChart.setDrawValueAboveBar(true);
mChart.getDescription().setEnabled(false);
mChart.setMaxVisibleValueCount(40);
mChart.setPinchZoom(false);
mChart.setDrawGridBackground(false);
MyHoroBarXFormatter formatterX = new MyHoroBarXFormatter(lendata);
XAxis xl = mChart.getXAxis(); // X 对应Y轴
xl.setPosition(XAxis.XAxisPosition.BOTTOM);
xl.setDrawAxisLine(true);
xl.setDrawGridLines(false);
xl.setGranularity(1f);
xl.setLabelCount(40);
// xl.setCenterAxisLabels(true);
xl.setAxisMinimum(0.3f);
xl.setValueFormatter(formatterX);
xl.setTextColor(Color.BLACK);
xl.setTextSize(12f);
mChart.setExtraBottomOffset(10f);
mChart.getAxisLeft().setEnabled(false);
MyAxisValueFormatter xFormatter = new MyAxisValueFormatter();
YAxis yr = mChart.getAxisRight();
yr.setDrawAxisLine(true);
yr.setDrawGridLines(true);
yr.setAxisMinimum(0f); // this replaces setStartAtZero(true)
yr.setValueFormatter(xFormatter);
yr.setTextSize(12f);
yr.setTextColor(Color.BLACK);
// yr.setInverted(true);
// setData(12, 50);
mChart.setFitBars(true);
mChart.animateY(1000);
Legend l = mChart.getLegend();
l.setEnabled(false);
setChartData(pnums);
}
private void setChartData(List<Integer> pnums) {
ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>();
for(int i=0 ;i<pnums.size();i++){
yVals1.add(new BarEntry(i+1, pnums.get(i)));
}
BarDataSet set1;
if (mChart.getData() != null &&
mChart.getData().getDataSetCount() > 0) {
set1 = (BarDataSet) mChart.getData().getDataSetByIndex(0);
set1.setValues(yVals1);
mChart.getData().notifyDataChanged();
mChart.notifyDataSetChanged();
} else {
set1 = new BarDataSet(yVals1, "");
set1.setDrawIcons(false);
ArrayList<IBarDataSet> dataSets = new ArrayList<IBarDataSet>();
dataSets.add(set1);
BarData data = new BarData(dataSets);
data.setValueTextSize(10f);
data.setValueFormatter(new MyBarFormatter()); // 设置柱状图点击竹子的字体
data.setValueTextColor(Color.BLACK);
data.setBarWidth(0.8f);
mChart.setData(data);
}
}
}
2:布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.github.mikephil.charting.charts.HorizontalBarChart
android:id="@+id/chart"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
3: 使用方法
List<String> lendata = data.getLendata();
List<Integer> pnums = data.getPnums();
if(lendata!=null && lendata.size()>0 && pnums!=null && pnums.size()>0){
mHbvChart.initChartData(lendata,pnums);
}else{
toast("数据为空");
}