效果图:
先上自定义view,因为要把所有的方法写在activity里 实在是太麻烦了,其实就是一个工具类。
第一个 普通柱状图
要求是固定宽度左右滑动,没有网格,长文字斜展示
public class MBarChart extends BarChart {
BChartMarkerView markerView;
public MBarChart(Context context) {
super(context);
}
public MBarChart(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MBarChart(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
private void initSetting() {
/*xy轴设置*/
//x轴设置显示位置在底部
mXAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
mXAxis.setGranularity(1f);
//mXAxis.setCenterAxisLabels(true);
mXAxis.setLabelCount(7);
mXAxis.setTextSize(8f);
//文字倾斜展示
mXAxis.setLabelRotationAngle(-60);
//保证y轴从0开始 不然会上移一点
mAxisLeft.setAxisMinimum(0f);
mAxisRight.setAxisMinimum(0f);
mAxisRight.enableGridDashedLine(10f,10f,10f);
//不显示X轴 Y轴线条
mXAxis.setDrawAxisLine(true);
mXAxis.setDrawGridLines(false);
mXAxis.setGridColor(Color.TRANSPARENT);
//mAxisLeft.setDrawAxisLine(false);
mAxisRight.setDrawAxisLine(false);
mAxisLeft.setDrawGridLines(false);
mAxisRight.setDrawGridLines(false);
//不显示左侧Y轴
mAxisRight.setEnabled(false);
/*折现图例 标签 设置*/
mLegend.setForm(Legend.LegendForm.LINE);
mLegend.setTextSize(0f);
//显示位置
mLegend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
mLegend.setOrientation(Legend.LegendOrientation.HORIZONTAL);
/*是否绘制在表里*/
mLegend.setDrawInside(false);
//不显示右下角描述内容
mDescription.setEnabled(false);
setDescription(mDescription);
}
public void setBarDataSet( int color, int size, final List<BarEntry> list,String[] v) {
BarDataSet barDataSet=new BarDataSet(list,"");
barDataSet.setColor(color);
barDataSet.setFormLineWidth(0f);
barDataSet.setFormSize(0f);
barDataSet.setDrawValues(false);
BarData barData=new BarData(barDataSet);
barData.setValueTextSize(10f);
ValueFormatter xAxisFormatter = new DayAxisValueFormatter(v,DayAxisValueFormatter.DAY);
mXAxis.setValueFormatter(xAxisFormatter);
if (size<10){
barData.setBarWidth((float) size/10f);
setData(barData);
}else {
setData(barData);
setChartData(size);
}
setChartEffect();
initSetting();
}
/*设置图表效果*/
private void setChartEffect(){
//不可以手动缩放
setScaleXEnabled(false);
setScaleYEnabled(false);
setScaleEnabled(false);
//背景颜色
setBackgroundColor(Color.WHITE);
//不显示图表网格
setDrawGridBackground(false);
setDrawBorders(false);
//背景阴影
setDrawBarShadow(false);
setHighlightFullBarEnabled(false);
//显示柱图底层阴影
setDrawBarShadow(false);
//设置动画效果
animateY(1000,Easing.EasingOption.Linear);
animateX(1000,Easing.EasingOption.Linear);
}
/* marker */
public void setMarkerView(Context context) {
markerView=new BChartMarkerView(context);
setMarker(markerView);
}
/*固定宽*/
private void setChartData(int size){
Matrix m = new Matrix();
m.postScale(scaleNum(size), 1f);//两个参数分别是x,y轴的缩放比例。例如:将x轴的数据放大为之前的1.5倍
getViewPortHandler().refresh(m, this, false);//将图表动画显示之前进行缩放
}
//30个横坐标时,缩放4f是正好的。
private float scalePercent = 3f/30f;
private float scaleNum(int xCount){
return xCount * scalePercent;
}
}
第二个 横向柱状图
要求是没有网格 有阴影
package com.example.lmy.cardkt.chart;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Matrix;
import android.util.AttributeSet;
import com.github.mikephil.charting.animation.Easing;
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.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.IValueFormatter;
import com.github.mikephil.charting.