MPAndroidChart开源图表库,柱状图和折线图CombinedChart

效果图如下:


1. 将mpandroidchartlibrary-2-2-4.jar包copy到项目的libs中。
2. 定义xml文件
3. 主要Java逻辑如下

public class DataCenterActivity extends Activity{

private String[] latest_week = new String[]{

"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.chart_combined_activity);
initView();
}
private void initView() {
// TODO Auto-generated method stub
mChart_combined = (CombinedChart) findViewById(R.id.in_the_latest_week_trading);
String[] fee = new String[]{"150.15","1250","1450.12","1240.88","1360.55","1120","0"};
String[] count = new String[]{"1","164","124","124","124","124","0"};
mChartCombinedStyle(fee,count);
CombinedData data = new CombinedData(latest_week); 
data.setData(generateLineData(fee));
data.setData(generateBarData(count));
mChart_combined.setData(data);
mChart_combined.invalidate();
}
/**柱状图和折线图 
* @param count  
* @param fee 
*/
private void mChartCombinedStyle(String[] fee, String[] count) {
    //x轴设置
XAxis xAxis = mChart_combined.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxis.setTextSize(10f);
xAxis.setTextColor(Color.rgb(102,102,102));
xAxis.setDrawGridLines(false);
xAxis.setSpaceBetweenLabels(2);
//左侧y轴设置
YAxis leftAxis = mChart_combined.getAxisLeft();
float min = 0,max = 0 ;
for(int i = 0; i < count.length; i++){
if(Float.valueOf(count[i]) > max)
max = Float.valueOf(count[i]);
if(Float.valueOf(count[i])<min)
min = Float.valueOf(count[i]);
}
if (max != 0) {
leftAxis.setAxisMaxValue(max+max/2);
}
leftAxis.setAxisMinValue(0f);
leftAxis.setEnabled(false);
//右侧y轴设置
YAxis rightAxis = mChart_combined.getAxisRight();
float right = 0;
for (int i = 0; i < fee.length; i++) {
right = right + Float.valueOf(fee[i]);
}
if (right != 0) {
rightAxis.setAxisMinValue(-right/fee.length);
}
rightAxis.setEnabled(false);
Legend mLegend = mChart_combined.getLegend();
// 设置比例图标示
mLegend.setEnabled(false);
//决定显不显示标签
mChart_combined.setDescription("");
//支持触控手势
mChart_combined.setTouchEnabled(true);
//启用缩放和拖动
mChart_combined.setDragEnabled(true);
mChart_combined.setScaleEnabled(true);
mChart_combined.setBackgroundColor(Color.WHITE);
mChart_combined.setDrawGridBackground(false);
mChart_combined.setDrawBarShadow(false);
mChart_combined.setExtraBottomOffset(10f);
mChart_combined.setExtraLeftOffset(10f);
mChart_combined.setExtraRightOffset(10f);
// draw bars behind lines
// mChart_combined.setDrawOrder(new CombinedChart.DrawOrder[] {
// CombinedChart.DrawOrder.BAR, CombinedChart.DrawOrder.BUBBLE, CombinedChart.DrawOrder.CANDLE, //  CombinedChart.DrawOrder.LINE, CombinedChart.DrawOrder.SCATTER
// });}
private LineData generateLineData(String[] fee) {
/**折线图*/
LineData d = new LineData();
ArrayList entries = new ArrayList();
for (int index = 0; index < fee.length; index++){
if (fee[index] == "") {
fee[index] = "0";
}
Entry entrie = new Entry(Float.parseFloat(fee[index]), index);
entries.add(entrie);
}
LineDataSet set = new LineDataSet(entries, "Line DataSet");
// 线宽
set.setLineWidth(1.0f);
// 显示的圆形大小
set.setCircleRadius(3.0f);
// 折线的颜色
set.setColor(Color.rgb(82,172,244));
// 圆球的颜色
set.setCircleColor(Color.rgb(82,172,244));
set.setDrawHighlightIndicators(false);
set.setValueTextSize(10f);
set.setValueTextColor(Color.rgb(102,102,102));
set.setDrawCircleHole(false);
set.setDrawCubic(false);
set.setCircleColorHole(Color.rgb(82,172,244));
// 设置折线上显示数据的格式。如果不设置,将默认显示float数据格式。
set.setValueFormatter(new ValueFormatter() {
@Override
public String getFormattedValue(float value, Entry entry,int dataSetIndex, ViewPortHandler viewPortHandler) {
// TODO Auto-generated method stub//    
int n = (int) value;String s = "¥" + value;return s;}});
//根据右侧的y轴显示
set.setAxisDependency(YAxis.AxisDependency.RIGHT);
d.addDataSet(set);return d;
}
private BarData generateBarData(String[] count) {
**柱状图*/
BarData d = new BarData();
ArrayList entries = new ArrayList();
for (int index = 0; index < count.length; index++){
if (count[index] == "") {
count[index] = "0";
}
entries.add(new BarEntry(Integer.parseInt(count[index]), index));
}
BarDataSet set = new BarDataSet(entries, "Bar DataSet");
set.setBarSpacePercent(30f);
set.setColor(Color.rgb(44, 201, 114));
set.setValueTextColor(Color.rgb(44, 201, 114));
set.setValueTextSize(10f);
set.setHighlightEnabled(false);
//根据左侧的y轴显示
set.setAxisDependency(YAxis.AxisDependency.LEFT);

d.addDataSet(set);return d;

}

代码并不算复杂,但网上找不到这样的写法,可能这样用的比较少,这次用到了写上来,如果有问题,希望大家指正。



  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值