一行代码 实现 MPAndroidChart 柱状图

匿名 (未验证) 提交于 2019-12-03 00:19:01

导入 implementation 'com.github.PhilJay:MPAndroidChart:v3.0.3'

调用

 public class DayReportActivity extends AppCompatActivity {      private BarChart chart1 ,chart2;      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_day_report);          initView();     }      private void initView() {          chart1 = findViewById(R.id.chart1);         chart2 = findViewById(R.id.chart2);          //x 周默认输值 可用下面的x_value代替         List<Float> x_number = new ArrayList<>();         for (int i = 0; i < 10; i++) {             x_number.add((float)i);         }         //y的值         List<Float> y_value = new ArrayList<>();         y_value.add((float)34);         y_value.add((float)74);         y_value.add((float)61);         y_value.add((float)19);         y_value.add((float)73);         y_value.add((float)23);         y_value.add((float)52);         y_value.add((float)83);         y_value.add((float)6);         y_value.add((float)47);          //x的值         String[] x_value = {"A","B","C","D","E","F","G","H","I","J"};          //单行柱状图           BarChartActivityOnlyUtils.init(DayReportActivity.this, chart1, x_number, y_value, "chart1", x_value);         //对比性柱状图           BarChartActivityUtils.init(DayReportActivity.this, chart2, x_number, y_value, "chart2", x_value); } 

BarChartActivityOnlyUtils

package com.ts.policesituationj.mpandroidchars;  import android.content.Context; import android.graphics.Color; import android.util.Log;  import com.github.mikephil.charting.charts.BarChart; 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.formatter.IAxisValueFormatter; import com.github.mikephil.charting.formatter.LargeValueFormatter; import com.github.mikephil.charting.utils.ColorTemplate;  import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List;  public class BarChartActivityOnlyUtils {      protected static BarChart mChart;      /**      *      * @param context      * @param mCharts      * @param xAxisValues     x_number      * @param yAxisValues     y_value      * @param label           标题      * @param values          x_value      */     public static void init(Context context,                             BarChart mCharts ,                             List<Float> xAxisValues,                             List<Float> yAxisValues,                             String label,                             String[] values){          mChart = mCharts;         mChart.setDrawBarShadow(false);         mChart.setDrawValueAboveBar(true);         mChart.getDescription().setEnabled(false);         // if more than 60 entries are displayed in the chart, no values will be         // drawn         mChart.setMaxVisibleValueCount(60);         // scaling can now only be done on x- and y-axis separately         mChart.setPinchZoom(false);         mChart.setDrawGridBackground(false);           //自定义x轴显示          XAxis xAxis = mChart.getXAxis();         xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);         xAxis.setDrawGridLines(false);         xAxis.setGranularity(1f); // only intervals of 1 day         xAxis.setLabelCount(7);         MyXFormatter formatter = new MyXFormatter(values);         xAxis.setValueFormatter(formatter);         xAxis.setLabelCount(xAxisValues.size() - 1, false);         IAxisValueFormatter custom = new MyAxisValueFormatter();          YAxis leftAxis = mChart.getAxisLeft();         leftAxis.setLabelCount(0, false);         leftAxis.setValueFormatter(custom);         leftAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);         leftAxis.setSpaceTop(15f);         leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)          YAxis rightAxis = mChart.getAxisRight();         rightAxis.setDrawGridLines(false);         rightAxis.setLabelCount(8, false);         rightAxis.setValueFormatter(custom);         rightAxis.setSpaceTop(15f);         rightAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)          Legend l = mChart.getLegend();         l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);         l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);         l.setOrientation(Legend.LegendOrientation.HORIZONTAL);         l.setDrawInside(false);         l.setForm(Legend.LegendForm.SQUARE);         l.setFormSize(9f);         l.setTextSize(11f);         l.setXEntrySpace(4f);          XYMarkerView mv = new XYMarkerView(context, formatter);         mv.setChartView(mChart); // For bounds control         mChart.setMarker(mv); // Set the marker to the chart          ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>();         ArrayList<BarEntry> yVals2 = new ArrayList<BarEntry>();         for (int i = 0; i < 10; i++) {             yVals1.add(new BarEntry(i, yAxisValues.get(i)));             yVals2.add(new BarEntry(i, yAxisValues.get(i)+20));         }          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, "A");             set1.setColors(ColorTemplate.MATERIAL_COLORS);              BarData data = new BarData(set1);             data.setValueFormatter(new LargeValueFormatter());              mChart.setData(data);         }     }  }   

需要辅助类

package com.ts.policesituationj.mpandroidchars;  import com.github.mikephil.charting.components.AxisBase; import com.github.mikephil.charting.formatter.IAxisValueFormatter;  import java.text.DecimalFormat;  public class MyAxisValueFormatter implements IAxisValueFormatter {      private DecimalFormat mFormat;      public MyAxisValueFormatter() {         mFormat = new DecimalFormat("###,###,###,##0.0");     }      @Override     public String getFormattedValue(float value, AxisBase axis) {         return mFormat.format(value) + "";     } }  package com.ts.policesituationj.mpandroidchars;  import android.content.Context; import android.widget.TextView;  import com.github.mikephil.charting.components.MarkerView; import com.github.mikephil.charting.data.CandleEntry; import com.github.mikephil.charting.data.Entry; import com.github.mikephil.charting.highlight.Highlight; import com.github.mikephil.charting.utils.MPPointF; import com.github.mikephil.charting.utils.Utils; import com.ts.policesituationj.R;  /**  * Custom implementation of the MarkerView.  *  * @author Philipp Jahoda  */ public class MyMarkerView extends MarkerView {      private TextView tvContent;      public MyMarkerView(Context context, int layoutResource) {         super(context, layoutResource);          tvContent = findViewById(R.id.tvContent);     }      // callbacks everytime the MarkerView is redrawn, can be used to update the     // content (user-interface)     @Override     public void refreshContent(Entry e, Highlight highlight) {          if (e instanceof CandleEntry) {              CandleEntry ce = (CandleEntry) e;              tvContent.setText("" + Utils.formatNumber(ce.getHigh(), 0, true));         } else {              tvContent.setText("" + Utils.formatNumber(e.getY(), 0, true));         }          super.refreshContent(e, highlight);     }      @Override     public MPPointF getOffset() {         return new MPPointF(-(getWidth() / 2), -getHeight());     } }  package com.ts.policesituationj.mpandroidchars;  import android.util.Log;  import com.github.mikephil.charting.components.AxisBase; import com.github.mikephil.charting.formatter.IAxisValueFormatter;  public class MyXFormatter implements IAxisValueFormatter {      private String[] mValues;      public MyXFormatter(String[] values) {         this.mValues = values;     }     private static final String TAG = "MyXFormatter";      @Override     public String getFormattedValue(float value, AxisBase axis) {         Log.d(TAG, "----->getFormattedValue: "+value);         return mValues[(int) value % mValues.length];     } }  package com.ts.policesituationj.mpandroidchars;  import android.content.Context; import android.widget.TextView;  import com.github.mikephil.charting.components.MarkerView; import com.github.mikephil.charting.data.Entry; import com.github.mikephil.charting.formatter.IAxisValueFormatter; import com.github.mikephil.charting.highlight.Highlight; import com.github.mikephil.charting.utils.MPPointF; import com.ts.policesituationj.R;  import java.text.DecimalFormat;  /**  * Custom implementation of the MarkerView.  *  * @author Philipp Jahoda  */ public class XYMarkerView extends MarkerView {      private TextView tvContent;     private IAxisValueFormatter xAxisValueFormatter;      private DecimalFormat format;      public XYMarkerView(Context context, IAxisValueFormatter xAxisValueFormatter) {         super(context, R.layout.custom_marker_view);          this.xAxisValueFormatter = xAxisValueFormatter;         tvContent = findViewById(R.id.tvContent);         format = new DecimalFormat("###.0");     }      // callbacks everytime the MarkerView is redrawn, can be used to update the     // content (user-interface)     @Override     public void refreshContent(Entry e, Highlight highlight) {          tvContent.setText("x: " + xAxisValueFormatter.getFormattedValue(e.getX(), null) + ", y: " + format.format(e.getY()));          super.refreshContent(e, highlight);     }      @Override     public MPPointF getOffset() {         return new MPPointF(-(getWidth() / 2), -getHeight());     } } 

一行代码 实现 MPAndroidChart 柱状图(2)
https://blog.csdn.net/a136447572/article/details/80438368

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!