JAVA中柱状图和折线图组合,分组折线图、柱状图实现(多条折线图、柱状图同时显示)实现方式...
使用MPAndroidChartLibery实现分组折线图和柱状图。
一、实现步骤: 1、同样需要 引入mpandroidchartlibrary-2-1-6.jar ;下载地址及介绍见Android中折线图实现方法(各类图表实现) 2、编写实现折线图的封装类:LineChars.java;(完整代码下附) 3、编写实现折线图的封装类:BarChart3s.java;(完整代码下附) 4、在主类中调用上面封装好的类即可。(完整代码下附) 5、MPAndroidChartsLibery 中文文档API地址: 中文文档API
二、完整代码: (1/3)LineCharts.java:
import java.util.ArrayList;
import android.graphics.Color;
import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.Legend.LegendForm;
import com.github.mikephil.charting.components.Legend.LegendPosition;
import com.github.mikephil.charting.components.XAxis.XAxisPosition;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.formatter.ValueFormatter;
import com.github.mikephil.charting.utils.ViewPortHandler;
/**
* 折线图,3条
*
* @author zp
*
* 2016年2月2日
*/
public class LineCharts {
/**
* 设置chart显示的样式
*
* @param mLineChart
*/
public LineCharts(LineChart mLineChart) {
// 是否在折线图上添加边框
mLineChart.setDrawBorders(false);
mLineChart.setDescription("");// 数据描述
// 如果没有数据的时候,会显示这个,类似listview的emtpyview
mLineChart.setNoDataTextDescription("暂无数据");
// 是否绘制背景颜色。
// 如果mLineChart.setDrawGridBackground(false),
// 那么mLineChart.setGridBackgroundColor(Color.CYAN)将失效;
mLineChart.setDrawGridBackground(false);
mLineChart.setGridBackgroundColor(Color.CYAN);
// 触摸
mLineChart.setTouchEnabled(true);
// 拖拽
mLineChart.setDragEnabled(true);
// 缩放
mLineChart.setScaleEnabled(true);
mLineChart.setPinchZoom(false);
// 设置背景
mLineChart.setBackgroundColor(Color.WHITE);
// // 设置x,y轴的数据
// mLineChart.setData(lineData);
// 设置比例图标示,就是那个一组y的value的
Legend mLegend = mLineChart.getLegend();
mLegend.setPosition(LegendPosition.BELOW_CHART_CENTER);
mLegend.setForm(LegendForm.CIRCLE);// 样式
mLegend.setFormSize(15.0f);// 字体
mLegend.setTextColor(Color.BLUE);// 颜色
// 沿x轴动画,时间2000毫秒。
mLineChart.animateX(2000);
mLineChart.getAxisRight().setEnabled(true); // 隐藏右边 的坐标轴(true不隐藏)
mLineChart.getXAxis().setPosition(XAxisPosition.BOTTOM); // 让x轴在下面
// // 隐藏左边坐标轴横网格线
// mLineChart.getAxisLeft().setDrawGridLines(false);
// 隐藏右边坐标轴横网格线
mLineChart.getAxisRight().setDrawGridLines(false);
// 隐藏X轴竖网格线
// mLineChart.getXAxis().setDrawGridLines(false);
// enable / disable grid lines
// mLineChart.setDrawVerticalGrid(false); // 是否显示水平的表格线
// mChart.setDrawHorizontalGrid(false);/ 让x轴在下面
}
/**
* @param count
* 数据点的数量。
* @return
*/
public LineData getLineData(int count) {
// ArrayList x = new ArrayList();
// for (int i = 0; i < count; i++) {
// // x轴显示的数据
// x.add("周" + i);
// }
// y轴的数据
ArrayList y_had = new ArrayList();
ArrayList y_wait = new ArrayList();
ArrayList y_yuqi = new ArrayList();
for (int i = 0; i < count; i++) {
float val = (float) (Math.random() * 100);
Entry entry = new Entry(val, i);
y_had.add(entry);
}
for (int i = 0; i < count; i++) {
float val = (float) (Math.random() * 100 - 8);
Entry entry = new Entry(val, i);
y_wait.add(entry);
}
for (int i = 0; i < count; i++) {
float val = (float) (Math.random() * 100 - 8);
Entry entry = new Entry(val, i);
y_yuqi.add(entry);
}
// y轴数据集
LineDataSet mLineDataSet_had = new LineDataSet(y_had, "已办理额度");
LineDataSet mLineDataSet_wait = new LineDataSet(y_wait, "待办理额度");
LineDataSet mLineDataSet_yuqi = new LineDataSet(y_yuqi, "逾期额度");
// 折线的颜色
mLineDataSet_had.setColor(Color.parseColor("#00C0BF"));
mLineDataSet_wait.setColor(Color.parseColor("#F26077"));
mLineDataSet_yuqi.setColor(Color.parseColor("#DEAD26"));
setLineStyle(mLineDataSet_had);
setLineStyle(mLineDataSet_wait);
setLineStyle(mLineDataSet_yuqi);
ArrayList mLineDataSets = new ArrayList();
mLineDataSets.add(mLineDataSet_had);
mLineDataSets.add(mLineDataSet_wait);
mLineDataSets.add(mLineDataSet_yuqi);
LineData mLineData = new LineData(getXAxisValues(), mLineDataSets);
return mLineData;
}
/**
* 设置折线样式,除了颜色(颜色单独设置)
*
* @param mLineDataSet
*/
public void setLineStyle(LineDataSet mLineDataSet) {
// 用y轴的集合来设置参数
// 线宽
mLineDataSet.setLineWidth(1.0f);
// 显示的圆形大小
mLineDataSet.setCircleSize(1.0f);
// // 折线的颜色
// mLineDataSet.setColor(Color.DKGRAY);
// 圆球的颜色
mLineDataSet.setCircleColor(Color.GREEN);
// 设置mLineDataSet.setDrawHighlightIndicators(false)后,
// Highlight的十字交叉的纵横线将不会显示,
// 同时,mLineDataSet.setHighLightColor(Color.CYAN)失效。
mLineDataSet.setDrawHighlightIndicators(true);
// 按击后,十字交叉线的颜色
mLineDataSet.setHighLightColor(Color.CYAN);
// 设置这项上显示的数据点的字体大小。
mLineDataSet.setValueTextSize(8.0f);
// mLineDataSet.setDrawCircleHole(true);
// 改变折线样式,用曲线。
// mLineDataSet.setDrawCubic(true);
// 默认是直线
// 曲线的平滑度,值越大越平滑。
// mLineDataSet.setCubicIntensity(0.2f);
// 填充曲线下方的区域,红色,半透明。
// mLineDataSet.setDrawFilled(true);
// mLineDataSet.setFillAlpha(128);
// mLineDataSet.setFillColor(Color.RED);
// 填充折线上数据点、圆球里面包裹的中心空白处的颜色。
mLineDataSet.setCircleColorHole(Color.YELLOW);
// 设置折线上显示数据的格式。如果不设置,将默认显示float数据格式。
mLineDataSet.setValueFormatter(new ValueFormatter() {
@Override
public String getFormattedValue(float value, Entry entry,
int dataSetIndex, ViewPortHandler viewPortHandler) {
int n = (int) value;
String s = "" + n;
return s;
}
});
}
public ArrayList getXAxisValues() {
ArrayList xAxis = new ArrayList();
xAxis.add("星期一");
xAxis.add("星期二");
xAxis.add("星期三");
xAxis.add("星期四");
xAxis.add("星期五");
xAxis.add("星期六");
xAxis.add("星期日");
return xAxis;
}
}
(2/3)BarChart3s.java:
import java.util.ArrayList;
import android.graphics.Color;
import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.Legend.LegendForm;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.XAxis.XAxisPosition;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;
/**
* 柱状图
*
* @author zp
*
* 2016年2月2日
*/
public class BarChart3s {
public BarChart3s(BarChart chart) {
// 数据描述
chart.setDescription("");
// 动画
chart.animateY(1000);
// 设置是否可以触摸
chart.setTouchEnabled(true);
// 是否可以拖拽
chart.setDragEnabled(true);
// 是否可以缩放
chart.setScaleEnabled(true);
// 集双指缩放
chart.setPinchZoom(true);
// 隐藏右边的坐标轴
chart.getAxisRight().setEnabled(false);
// 隐藏左边的左边轴
chart.getAxisLeft().setEnabled(true);
Legend mLegend = chart.getLegend(); // 设置比例图标示
// 设置窗体样式
mLegend.setForm(LegendForm.SQUARE);
// 字体
mLegend.setFormSize(4f);
// 字体颜色
mLegend.setTextColor(Color.parseColor("#7e7e7e"));
XAxis xAxis = chart.getXAxis();
xAxis.setPosition(XAxisPosition.BOTTOM);
xAxis.setDrawGridLines(false);
xAxis.setSpaceBetweenLabels(2);
chart.invalidate();
}
public ArrayList getDataSet() {
ArrayList dataSets = null;
ArrayList valueSet1 = new ArrayList();
BarEntry v1e1 = new BarEntry(110.000f, 0); // Jan
valueSet1.add(v1e1);
BarEntry v1e2 = new BarEntry(40.000f, 1); // Feb
valueSet1.add(v1e2);
BarEntry v1e3 = new BarEntry(60.000f, 2); // Mar
valueSet1.add(v1e3);
BarEntry v1e4 = new BarEntry(30.000f, 3); // Apr
valueSet1.add(v1e4);
BarEntry v1e5 = new BarEntry(90.000f, 4); // May
valueSet1.add(v1e5);
BarEntry v1e6 = new BarEntry(100.000f, 5); // Jun
valueSet1.add(v1e6);
ArrayList valueSet2 = new ArrayList();
BarEntry v2e1 = new BarEntry(150.000f, 0); // Jan
valueSet2.add(v2e1);
BarEntry v2e2 = new BarEntry(90.000f, 1); // Feb
valueSet2.add(v2e2);
BarEntry v2e3 = new BarEntry(120.000f, 2); // Mar
valueSet2.add(v2e3);
BarEntry v2e4 = new BarEntry(60.000f, 3); // Apr
valueSet2.add(v2e4);
BarEntry v2e5 = new BarEntry(20.000f, 4); // May
valueSet2.add(v2e5);
BarEntry v2e6 = new BarEntry(80.000f, 5); // Jun
valueSet2.add(v2e6);
ArrayList valueSet3 = new ArrayList();
BarEntry v3e1 = new BarEntry(20.000f, 0); // Jan
valueSet3.add(v3e1);
BarEntry v3e2 = new BarEntry(60.000f, 1); // Feb
valueSet3.add(v3e2);
BarEntry v3e3 = new BarEntry(90.000f, 2); // Mar
valueSet3.add(v3e3);
BarEntry v3e4 = new BarEntry(150.000f, 3); // Apr
valueSet3.add(v3e4);
BarEntry v3e5 = new BarEntry(120.000f, 4); // May
valueSet3.add(v3e5);
BarEntry v3e6 = new BarEntry(40.000f, 5); // Jun
valueSet3.add(v3e6);
BarDataSet barDataSet1 = new BarDataSet(valueSet1, "办理中");
barDataSet1.setColor(Color.parseColor("#F26077"));
barDataSet1.setBarShadowColor(Color.parseColor("#01000000"));
BarDataSet barDataSet2 = new BarDataSet(valueSet2, "已办理");
barDataSet2.setColor(Color.parseColor("#00C0BF"));
barDataSet2.setBarShadowColor(Color.parseColor("#01000000"));
BarDataSet barDataSet3 = new BarDataSet(valueSet3, "逾期");
barDataSet3.setColor(Color.parseColor("#DEAD26"));
barDataSet3.setBarShadowColor(Color.parseColor("#01000000"));
dataSets = new ArrayList();
dataSets.add(barDataSet1);
dataSets.add(barDataSet2);
dataSets.add(barDataSet3);
return dataSets;
}
public ArrayList getXAxisValues() {
ArrayList xAxis = new ArrayList();
xAxis.add("门店1");
xAxis.add("门店2");
xAxis.add("门店3");
xAxis.add("门店4");
xAxis.add("门店5");
xAxis.add("门店6");
return xAxis;
}
}
(3/3)调用封装类,加载折线图和柱状图:
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.widget.TextView;
import com.example.myframeworktab.R;
import com.example.myframeworktab.base.Activity_base;
import com.example.myframeworktab.utils.ToastUtil;
import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.highlight.Highlight;
import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
/**
*
* 工单详情
*
* 2016年2月11日
*/
@SuppressLint("NewApi")
public class Activity_detail_gongdan extends Activity_base {
private BarChart3s mBarChart3s;
private LineCharts lineCharts;
private TextView tv_shop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.aty_detail_jiaoyi);
setTitleText("工单详情");
setTitleBack();
tv_shop = (TextView) findViewById(R.id.tv_shop);
// 柱状图
BarChart chart_bar = (BarChart) findViewById(R.id.chart_bar);
mBarChart3s = new BarChart3s(chart_bar);
BarData data = new BarData(mBarChart3s.getXAxisValues(),
mBarChart3s.getDataSet());
// 设置数据
chart_bar.setData(data);
chart_bar
.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
@Override
public void onValueSelected(Entry e, int dataSetIndex,
Highlight h) {
// ToastUtil.showToast(Activity_detail_gongdan.this,
// "点击了~~" + e.getXIndex());
tv_shop.setText("门店" + (e.getXIndex() + 1) + "近一周交易额");
// 折线图
LineChart chart = (LineChart) findViewById(R.id.chart);
lineCharts = new LineCharts(chart);
// 制作7个数据点(沿x坐标轴)
LineData mLineData = lineCharts.getLineData(7);
// setChartStyle(chart, mLineData, Color.WHITE);
// 设置x,y轴的数据
chart.setData(mLineData);
}
@Override
public void onNothingSelected() {
}
});
// 默认显示
// 折线图
LineChart chart = (LineChart) findViewById(R.id.chart);
lineCharts = new LineCharts(chart);
// 制作7个数据点(沿x坐标轴)
LineData mLineData = lineCharts.getLineData(7);
// setChartStyle(chart, mLineData, Color.WHITE);
// 设置x,y轴的数据
chart.setData(mLineData);
}
@Override
protected void initView() {
}
@Override
protected void initListener() {
}
}
所需的aty_detail_jiaoyi.xml:
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="vertical" >
android:id="@+id/chart_bar"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginBottom="20dp"
android:layout_marginLeft="10dp"
android:layout_weight="2"
android:background="@color/white"
android:paddingRight="15dp" />
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/line_gray" />
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:gravity="center_vertical"
android:orientation="horizontal" >
android:id="@+id/tv_unit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_gravity="left"
android:layout_marginLeft="15dp"
android:layout_marginTop="10dp"
android:text="(元)"
android:textColor="@color/gray_normal" />
android:id="@+id/tv_shop"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="15dp"
android:layout_marginTop="10dp"
android:layout_weight="1"
android:gravity="center_horizontal"
android:text="门店1近一周交易额"
android:textColor="@color/gray_normal"
android:textSize="14sp" />
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_gravity="right"
android:layout_marginRight="15dp"
android:layout_marginTop="10dp"
android:text="(元)"
android:textColor="@color/gray_normal"
android:visibility="invisible" />
android:id="@+id/chart"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginBottom="20dp"
android:layout_marginLeft="10dp"
android:layout_weight="2"
android:paddingRight="15dp" />
JAVA中柱状图和折线图组合,分组折线图、柱状图实现(多条折线图、柱状图同时显示)实现方式...相关推荐
- echart 折线从左到右动画效果_echarts多条折线图动态分层的实现方法
1.关于Echarts 大家可以到这个网址看一下,还是比较详细的. 这个功能还是很强大的,对于喜欢做数据统计来说是美味的. 2.echarts多条折线图动态分层 var xData = param.x ...
- java中excel文件的导入,限制上传的文件类型,文件的大小,显示上传文件的进度条...
1. 前台代码 1 <!DOCTYPE html> 2 <html lang="en" xmlns:th="http://www.thymeleaf.o ...
- 在java中实现滚动文字,通过线程实现文字在屏幕上不停滚动,为什么文字不显示啊,求指点...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 代码如下: import java.awt.*; import java.applet.*; import javax.swing.*; public c ...
- Java中WeakReference,SoftReference,PhantomReference和Strong Reference之间的区别
很长一段时间以来,WeakReference和SoftReference都已添加到Java API中,但是并不是每个Java程序员都熟悉它. 这意味着在Java中使用WeakReference和Sof ...
- Java中锁的使用和实现
首先,我们要了解一个概念,JAVA中的锁到底是什么呢? 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源. Lock接口 在Java SE 5之后,并发包中新增 ...
- java中list,set,map集合的区别,及面试要点
Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...
- 在Java中打印金字塔图案
1.问题描述 打印出金字塔图案,如图1所示. 图1 2.问题分析 这时一个很经典的循环应用的问题.我们都知道,打印输出的时候,都是从 最左端输出,而这里第一个三角形符号是在最中间,这实际是因为三角形之 ...
- 在java中如何产生随机数
在java中,我们输入数值的代码是:Scanner 这种情况在日常的原则 中使用的较多,那么如果我们写一个东西时,自己无法判断自己需要 选择那个时我们就需要我们就需要编译器为我们生成一个随机的数字 供 ...
- Java中的日期操作
在日志中常用的记录当前时间及程序运行时长的方法: public void inject(Path urlDir) throws Exception {SimpleDateFormat sdf = ne ...
最新文章
- Java这个高级特性-泛型,很多人还没用过!
- 2020 北京智源大会“云上”开幕, 中外顶尖学者畅想AI的下一个十年
- 探索 COVID-19 新冠数据来学习 Pandas
- 引领深度学习潮流,刷屏计算机视觉顶会,揭秘商汤研究梦之队
- 开始使用Bootstrap
- LVS NAT/DR
- VTK:等参细胞演示用法实战
- Silverlight 解谜游戏 之十三 游戏暗示(2)
- 职校学计算机对口高考可以考幼师吗,幼师专业对口高考考那些
- Springboot中常用的文件上传和下载通用接口
- DNSPod揭6省断网重大事故内幕:网游私服恶斗
- ssrs 数据分页_如何在SSRS中使用JSON数据
- OpenCV4.5.1 | 使用一行代码将图像匹配性能提高14%
- immunedeconv估算免疫细胞比例
- Transformer结构的初步探索
- Excel -- 实用技巧
- 在Windows上使用Ubuntu共享的打印机
- C语言:重命名文件(rename()函数)
- 【DRP项目】安装Oracle数据库之服务端安装+客户端安装(一)
- 计算机英语pork,pork是什么意思_pork的翻译_音标_读音_用法_例句_爱词霸在线词典...