80,350
社区成员
发帖
与我相关
我的任务
分享
package com.demo.mybarchart;
import android.graphics.Color;
import android.graphics.Matrix;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
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.data.Entry;
import com.github.mikephil.charting.formatter.YAxisValueFormatter;
import com.github.mikephil.charting.highlight.Highlight;
import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements OnChartValueSelectedListener {
private BarChart barChart;
private List<Float> listData;
private Button button;
private Button button2;
private int anInt = 31;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
showBarChart(listData);//显示柱状图
}
private void initView() {
setTitle(getIntent().getStringExtra("title"));
listData = new ArrayList<>();
barChart = (BarChart) findViewById(R.id.barchart);
barChart.setOnChartValueSelectedListener(this);
button = (Button) findViewById(R.id.btn);
button2 = (Button) findViewById(R.id.btn2);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
anInt = 5;
initData();
showBarChart(listData);//显示柱状图
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
anInt = 31;
initData();
showBarChart(listData);//显示柱状图
}
});
}
private void initData() {
//模拟数据源,y轴数值用随机数显示
listData.clear();
for (int i = 0; i < anInt; i++) {
listData.add((float) (Math.random() * 10));
}
}
private void showBarChart(List<Float> listData) {//count表示横坐标个数
initSrc(listData);
initXAxis();
BarData barData = getBarData(listData.size());
barChart.setData(barData); // 设置数据
Matrix m = new Matrix();
m.postScale((float) listData.size()/10, 1f);//两个参数分别是x,y轴的缩放比例。例如:将x轴的数据放大为之前的1.5倍
barChart.getViewPortHandler().refresh(m, barChart, true);//将图表动画显示之前进行缩放
barChart.notifyDataSetChanged();
barChart.invalidate();//刷新图表
}
private void initSrc(List<Float> listData) {
// 如果没有数据的时候,会显示这个,类似ListView的EmptyView
barChart.setNoDataTextDescription("暂无数据");
barChart.setDrawBorders(false); //是否在折线图上添加边框
barChart.setDescription("");// 数据描述
barChart.setDescriptionPosition(0, 0);//数据描述的位置(设置0,0没有描述)
barChart.setDescriptionColor(Color.RED);//数据的颜色
barChart.setDescriptionTextSize(30);//数据字体大小
barChart.setDrawGridBackground(false); // 是否显示表格颜色
barChart.setGridBackgroundColor(this.getResources().getColor(R.color.yellow_90)); // 表格的的颜色
barChart.setBackgroundColor(0xff1D2135);// 设置整个图标控件的背景
barChart.setDrawBarShadow(true);//柱状图没有数据的部分是否显示阴影效果
barChart.setScaleEnabled(false);// 是否可以缩放
barChart.setPinchZoom(false);//y轴的值是否跟随图表变换缩放;如果禁止,y轴的值会跟随图表变换缩放
barChart.setTouchEnabled(true); // 设置是否可以触摸
barChart.setDragEnabled(true);// 是否可以拖拽
barChart.setDoubleTapToZoomEnabled(false);//设置双击不放大
barChart.setDrawValueAboveBar(true);//柱状图上面的数值显示在柱子上面还是柱子里面
barChart.zoom((float) listData.size()/10, 0, 0, 0);//设置缩放比例
barChart.animateXY(500, 1000);
Legend mLegend = barChart.getLegend(); // 设置比例图标示,就是那个一组y的value的
mLegend.setEnabled(false);//true和false能控制比例图标识是否显示
mLegend.setPosition(Legend.LegendPosition.BELOW_CHART_RIGHT);//设置比例图标的位置
mLegend.setDirection(Legend.LegendDirection.LEFT_TO_RIGHT);//设置比例图标和文字之间的位置方向
mLegend.setTextColor(0xffFFA536);
YAxisValueFormatter custom = new MyYAxisValueFormatter();//自定义Y轴文字样式
barChart.getAxisLeft().setValueFormatter(custom);
barChart.getAxisLeft().setTextColor(this.getResources().getColor(R.color.yellow_tran));
barChart.getXAxis().setTextColor(this.getResources().getColor(R.color.yellow_tran));
}
private void initXAxis() {
barChart.getXAxis().setDrawGridLines(false);//是否显示竖直标尺线
barChart.getXAxis().setLabelsToSkip(0);//设置横坐标显示的间隔
barChart.getXAxis().setDrawLabels(true);//是否显示X轴数值
barChart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM);//设置X轴的位置 默认在上方
barChart.getXAxis().setDrawAxisLine(false);
barChart.getXAxis().setLabelRotationAngle(-90);
barChart.getAxisRight().setAxisLineWidth(0);
barChart.getAxisRight().setDrawLabels(false);//右侧是否显示Y轴数值
barChart.getAxisRight().setEnabled(false);//是否显示最右侧竖线
barChart.getAxisRight().setDrawAxisLine(false);
barChart.getAxisLeft().setDrawAxisLine(false);
barChart.getAxisLeft().setDrawGridLines(false);
}
private BarData getBarData(int count) {
//count x轴个数
ArrayList<String> xValues = new ArrayList<>();
for (int i = 0; i < count; i++) {
xValues.add( "Mon " + (i + 1));
}
ArrayList<BarEntry> yValues = new ArrayList<>();
for (int i = 0; i < count; i++) {
yValues.add(new BarEntry(listData.get(i), i));
}
// y轴的数据集合
BarDataSet barDataSet = new BarDataSet(yValues, "");
barDataSet.setLabel("我的大柱子");
barDataSet.setBarSpacePercent(50);//设置柱子之间的宽度
barDataSet.setVisible(true);//是否显示柱状图柱子
barDataSet.setColor(this.getResources().getColor(R.color.yellow));//设置柱子颜色
barDataSet.setHighLightColor(this.getResources().getColor(R.color.yellow));
barDataSet.setDrawValues(false);//是否显示柱子上面的数值
barDataSet.setBarShadowColor(this.getResources().getColor(R.color.yellow_90));
ArrayList<BarDataSet> barDataSets = new ArrayList<BarDataSet>();
barDataSets.add(barDataSet); // add the datasets
BarData barData = new BarData(xValues, barDataSet);
return barData;
}
@Override
public void onValueSelected(Entry e, int i, Highlight highlight) {
Toast.makeText(this, e.getXIndex()+"valu"+e.getVal()+e.getData(),Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected() {
Toast.makeText(this, "onNothingSelected",Toast.LENGTH_SHORT).show();
}
//设置Y轴刻度样式
public class MyYAxisValueFormatter implements YAxisValueFormatter {
private DecimalFormat mFormat;
public MyYAxisValueFormatter() {
mFormat = new DecimalFormat("###,###,###,##0");
}
@Override
public String getFormattedValue(float v, YAxis yAxis) {
return mFormat.format(v) + "k";
}
}
}
barChart.setVisibleXRangeMaximum(10);
barChart.setVisibleXRangeMinimum(10);