您的位置:首页 > 移动开发 > Android开发

MPAndroidChart的LineChart的使用

2017-08-23 19:03 447 查看

最近开发用到图表,如果简单使用建议使用hellocharts,不用自己处理ViewPager中的冲突



如果朋友想使用渐变,这里有Github的一个patch,可以自己去源码中添加

LineChart的github补丁

博主也是渣渣对事件处理不是很清楚,坑了一天,希望大家以后可以有更好的处理方式可以告诉博主 O(∩_∩)O

@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
getParent().requestDisallowInterceptTouchEvent(true);//这里我们是让getParent()去请求
startX = (int) event.getX();
startY = (int) event.getY();
break;
case MotionEvent.ACTION_MOVE:
endX = (int) event.getX();
endY = (int) event.getY();
if(Math.abs(endX-startX)>Math.abs(endY - startY)){//左右滑动
XAxis xAxis = getXAxis();
if(endX>startX){//右滑
if((int)getLowestVisibleX() == (int) xAxis.getAxisMinimum()){
//这里我们需要父控件去拦截这个事件,判断是否是我们的第一个页面
getParent().requestDisallowInterceptTouchEvent(false);
4000
}else{
getParent().requestDisallowInterceptTouchEvent(true);
}
}else{//左滑
//判断是否是我们的11个详情页里面某一个详情页的里面的最后一个页面
if((int)getHighestVisibleX() == (int) xAxis.getAxisMaximum()){
getParent().requestDisallowInterceptTouchEvent(false);
}else{
getParent().requestDisallowInterceptTouchEvent(true);
}
}
}else{//上下滑动
getParent().requestDisallowInterceptTouchEvent(false);
}
break;
case MotionEvent.ACTION_UP:
getParent().requestDisallowInterceptTouchEvent(false);
break;
}
return super.onTouchEvent(event);
}


简单使用

private void showChart() {
setLineChartProperties();
setLineChartLegend();
setXAxis();
setYAxis();
setLineData(xListValue.size(),courseList);
}


//简单属性的设置
private void setLineChartProperties() {
mlinechart.getDescription().setEnabled(false);//设置描述文本不显示
mlinechart.setDrawGridBackground(false);//设置是否显示表格背景
mlinechart.setTouchEnabled(true);//设置是否可以触摸
mlinechart.setDragDecelerationFrictionCoef(0.9f);
mlinechart.setDragEnabled(true);//设置是否可以拖拽
mlinechart.setScaleEnabled(false);//设置是否可以缩放
mlinechart.setDrawGridBackground(false);
mlinechart.setHighlightPerDragEnabled(true);
mlinechart.setPinchZoom(true);
mlinechart.setBackgroundColor(Color.parseColor("#F3F3F3"));
//mlinechart.setBackgroundColor(Color.LTGRAY);//设置背景颜色
float ratio = (float) xListValue.size()/(float) 10;
mlinechart.zoom(ratio,1f,0,0);//显示的时候是按照多大的比率缩放显示  1f表示不放大缩小
//我默认手机屏幕上显示10  剩下的滑动折线图然后显示。。假如要显示25个 那么除以10 就是放大2.5f。。同理
// 56个民族   那么放大5.6f
mlinechart.animateX(1500);//设置从X轴出来的动画时间
}


private void setLineChartLegend() {
//设置图例
Legend l = mlinechart.getLegend();
l.setForm(Legend.LegendForm.CIRCLE);//设置比例图前面的图标
l.setTextSize(11f);
l.setTextColor(Color.BLACK);
//设置图例的位置
l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);
l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
l.setDrawInside(false);
}


private void setXAxis() {
//自定义设置横坐标
IAxisValueFormatter xValueFormatter = new ExamModelTwoYValueFormatter(xListValue);
//X轴
XAxis xAxis = mlinechart.getXAxis();
xAxis.enableGridDashedLine(10f, 10f, 0f);
xAxis.setTextSize(11f);
xAxis.setTextColor(Color.BLACK);
xAxis.setDrawGridLines(false);//设置不从X轴发出横线
xAxis.setDrawAxisLine(true);//设置显示X轴
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//设置X轴现实的位置
xAxis.setValueFormatter(xValueFormatter);//设置自定义X轴值
//xAxis.setLabelCount(xListValue.size());//设置X轴显示的个数
xAxis.setLabelCount(10);//一个界面显示10个Lable。那么这里要设置11个
xAxis.setGranularity(1f);//设置最小间隔,防止当放大时出现重复标签
xAxis.setLabelRotationAngle(-40f);
}


private void setYAxis() {
YAxis leftYAxis = mlinechart.getAxisLeft();
leftYAxis.setTextColor(Color.BLACK);//设置左边Y轴的字体颜色
leftYAxis.setTextSize(11f);//设置左边Y轴的字体大小
//leftYAxis.setGridColor(Color.parseColor("#ff8b3d"));设置网格线的颜色
//leftYAxis.setAxisMaximum(1000f);//设置Y轴最大值
leftYAxis.setAxisMinimum(0f);//设置Y轴最小值是0
leftYAxis.setDrawGridLines(true);//设置从Y轴发出横向直线
leftYAxis.setGranularityEnabled(true);
leftYAxis.setDrawAxisLine(true);//设置左边Y轴显示
//leftYAxis.setDrawZeroLine(false);
YAxis rightYAxis = mlinechart.getAxisRight();
rightYAxis.setEnabled(false);//设置右边Y轴隐藏
}


private int[] mColors = new int[] {
Color.parseColor("#FFD700"),
Color.parseColor("#FF3E96"),
Color.parseColor("#EEEE00"),
Color.parseColor("#EE0000"),
Color.parseColor("#CD853F"),
Color.parseColor("#98F5FF")
};

private void setLineData(int size,ArrayList<String> courseList){
mlinechart.resetTracking();

ArrayList<ILineDataSet> dataSets = new ArrayList<ILineDataSet>();

for (int z = 0; z < courseList.size(); z++) {

ArrayList<Entry> values = new ArrayList<Entry>();

for (int i = 0; i < size; i++) {
double val = (Math.random() * size) + 3;
values.add(new Entry(i, (float) val));
}

//LineDataSet d = new LineDataSet(values, "DataSet " + (z + 1));
LineDataSet set = new LineDataSet(values, courseList.get(z));
set.setLineWidth(2.5f);
set.setCircleRadius(4f);

int color = mColors[z % mColors.length];
set.setColor(color);
set.setCircleColor(color);
set.setHighlightEnabled(true);//设置是否显示十字线

// 改变折线样式,用曲线。
set.setMode(LineDataSet.Mode.CUBIC_BEZIER);
// 曲线的平滑度
set.setCubicIntensity(0.2f);

//设置填充
//set.setDrawFilled(true);
//set.setFillAlpha(20);
//set.setFillColor(Color.GREEN);

//设置背景渐变
/*if (Utils.getSDKInt() >= 18) {
// fill drawable only supported on api level 18 and above
Drawable drawable = ContextCompat.getDrawable(this, R.drawable.fade_red);//设置渐变
set.setFillDrawable(drawable);
}
else {
set.setFillColor(Color.GREEN);
}*/

dataSets.add(set);
}

// make the first DataSet dashed
//((LineDataSet) dataSets.get(0)).enableDashedLine(10, 10, 0);
//((LineDataSet) dataSets.get(0)).setColors(ColorTemplate.VORDIPLOM_COLORS);
//((LineDataSet) dataSets.get(0)).setCircleColors(ColorTemplate.VORDIPLOM_COLORS);

LineData data = new LineData(dataSets);
//data.setValueTextColor(Color.BLACK);//设置数据点文字颜色
//data.setValueTextSize(10f);//设置数据点文字大小
data.setDrawValues(true);//设置不显示数据点

mlinechart.setData(data);
mlinechart.invalidate();
}


有的朋友可能会用到背景渐变

//设置填充
set.setDrawFilled(true);//设置允许填充
set.setFillAlpha(85);
//set
8e10
.setFillColor();//设置填充的颜色

//设置背景渐变
if (Utils.getSDKInt() >= 18) {
// fill drawable only supported on api level 18 and above
Drawable drawable = ContextCompat.getDrawable(getActivity(), R.drawable.line_chart_gradient);//设置渐变
set.setFillDrawable(drawable);
} else {
set.setFillColor(Color.RED);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: