您的位置:首页 > 其它

achartengine图标框架的使用心得

2016-07-30 10:48 375 查看
废话不多说先贴效果图,跟代码,后面再详解:

效果图如下


效果图如下


由于项目公司数据保密性加了马赛克。贴代码

代码如下:

package com.tony.linechart;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
import org.achartengine.tools.PanListener;
import org.achartengine.tools.ZoomEvent;
import org.achartengine.tools.ZoomListener;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.Paint.Align;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.LinearLayout;

public class StatusLineActivity extends Activity implements CompoundButton.OnCheckedChangeListener{
private LinearLayout chart;
private GraphicalView chartView;
private CheckBox measuredBox,qualityBox,safeBox;
private XYSeries measuredSeries,qualitySeries,safeSeries;
private XYSeriesRenderer measuredSeriesRenderer,qualitySeriesRenderer,safeSeriesRenderer;
private XYMultipleSeriesRenderer seriesRenderer;
private XYMultipleSeriesDataset seriesDataset;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_line_chart);
initView();
initMeasuredData();
initQualityData();
initSafeData();
initXYMultipleSeriesRenderer();
showChart();
}

private void initQualityData() {
qualitySeries=new XYSeries("质量");
qualitySeries.add(1, 0.27);
qualitySeries.add(2, 0.22);
qualitySeries.add(3, 0.20);
qualitySeries.add(4, 0.21);
qualitySeries.add(5, 0.25);
qualitySeries.add(6, 0.22);
qualitySeries.add(7, 0.23);
qualitySeries.add(8, 0.33);
qualitySeries.add(9, 0.14);
qualitySeries.add(10, 0.23);
qualitySeriesRenderer=new XYSeriesRenderer();
qualitySeriesRenderer.setPointStyle(PointStyle.CIRCLE);//坐标点的显示风格
qualitySeriesRenderer.setPointStrokeWidth(3);//坐标点的大小
qualitySeriesRenderer.setColor(0xFF00C8FF);//表示该组数据的图或线的颜色
qualitySeriesRenderer.setDisplayChartValues(false);//设置是否显示坐标点的y轴坐标值
qualitySeriesRenderer.setChartValuesTextSize(12);
}
private void initSafeData() {
safeSeries=new XYSeries("安全");
safeSeries.add(1, 0.16);
safeSeries.add(2, 0.10);
safeSeries.add(3, 0.27);
safeSeries.add(4, 0.29);
safeSeries.add(5, 0.24);
safeSeries.add(6, 0.38);
safeSeries.add(7, 0.33);
safeSeries.add(8, 0.15);
safeSeries.add(9, 0.17);
safeSeries.add(10, 0.1);
safeSeriesRenderer=new XYSeriesRenderer();
safeSeriesRenderer.setPointStyle(PointStyle.DIAMOND);//坐标点的显示风格
safeSeriesRenderer.setPointStrokeWidth(3);//坐标点的大小
safeSeriesRenderer.setColor(0xFF1FD425);//表示该组数据的图或线的颜色
safeSeriesRenderer.setDisplayChartValues(false);//设置是否显示坐标点的y轴坐标值
safeSeriesRenderer.setChartValuesTextSize(12);//设置显示的坐标点值的字体大小
}
private void initMeasuredData() {
measuredSeries=new XYSeries("实测");
measuredSeries.add(1, 0.36);
measuredSeries.add(2, 0.30);
measuredSeries.add(3, 0.27);
measuredSeries.add(4, 0.29);
measuredSeries.add(5, 0.34);
measuredSeries.add(6, 0.28);
measuredSeries.add(7, 0.33);
measuredSeries.add(8, 0.11);
measuredSeries.add(9, 0.17);
measuredSeries.add(10, 0.08);
measuredSeriesRenderer=new XYSeriesRenderer();
measuredSeriesRenderer.setPointStyle(PointStyle.DIAMOND);//坐标点的显示风格
measuredSeriesRenderer.setPointStrokeWidth(3);//坐标点的大小
measuredSeriesRenderer.setColor(0xFFF46C48);//表示该组数据的图或线的颜色
measuredSeriesRenderer.setDisplayChartValues(false);//设置是否显示坐标点的y轴坐标值
measuredSeriesRenderer.setChartValuesTextSize(12);//设置显示的坐标点值的字体大小
}

private void initView() {
chart = (LinearLayout) findViewById(R.id.chart);
measuredBox= (CheckBox) findViewById(R.id.measured_box);
measuredBox.setChecked(true);
measuredBox.setOnCheckedChangeListener(this);
qualityBox= (CheckBox) findViewById(R.id.quality_box);
qualityBox.setChecked(true);
qualityBox.setOnCheckedChangeListener(this);
safeBox= (CheckBox) findViewById(R.id.safe_box);
safeBox.setChecked(true);
safeBox.setOnCheckedChangeListener(this);
}

private void showChart() {
if(measuredBox.isChecked()){
seriesDataset.addSeries(measuredSeries);
seriesRenderer.addSeriesRenderer(measuredSeriesRenderer);}
if(qualityBox.isChecked()){
seriesDataset.addSeries(qualitySeries);
seriesRenderer.addSeriesRenderer(qualitySeriesRenderer);
}
if(safeBox.isChecked()){
seriesDataset.addSeries(safeSeries);
seriesRenderer.addSeriesRenderer(safeSeriesRenderer);
}
chartView=ChartFactory.getLineChartView(this,seriesDataset,seriesRenderer);
/*chartView.addZoomListener( new ZoomListener() {
@Override
public void zoomApplied(ZoomEvent e) {
double start = seriesRenderer.getXAxisMin();
double stop = (double)seriesRenderer.getXAxisMax();
double step = (double)(stop - start) / 5;
seriesRenderer.clearXTextLabels();
for (double i = start; i <= stop; i += step)
seriesRenderer.addXTextLabel(i+1, "label"+(int)i);
seriesRenderer.setXLabels(0);
}

@Override
public void zoomReset() { }
}, true, true);

chartView.addPanListener(new PanListener() {
@Override
public void panApplied() {
double start = seriesRenderer.getXAxisMin();
double stop = (double)seriesRenderer.getXAxisMax();
double step = (double)(stop - start) / 5;
seriesRenderer.clearXTextLabels();
for (double i = start; i <= stop; i += step)
seriesRenderer.addXTextLabel(i+1, "label"+(int)i);
seriesRenderer.setXLabels(0);
}
});*/

chart.addView(chartView);
}
private void initXYMultipleSeriesRenderer() {
/*描绘器,设置图标整体效果,比如x,y轴效果,缩放比例,颜色设置*/
seriesRenderer=new XYMultipleSeriesRenderer();
seriesDataset=new XYMultipleSeriesDataset();
seriesRenderer.setApplyBackgroundColor(true);//是应用设置的背景颜色
seriesRenderer.setBackgroundColor(Color.argb(100, 255, 231, 224));//设置图表的背景颜色
seriesRenderer.setAxisTitleTextSize(16);//设置坐标轴标题字体的大小
seriesRenderer.setChartTitleTextSize(30);//设置图表标题的字体大小
seriesRenderer.setLabelsTextSize(28);//设置标签字体大小
seriesRenderer.setLegendTextSize(28);//设置说明字体大小
//seriesRenderer.setXLabelsAngle(-90);
seriesRenderer.setMargins(new int[] { 40, 30,200, 20 });//设置外边距,顺序为:上左下右
seriesRenderer.setYAxisMin(0);//设置y轴的起始值
seriesRenderer.setYAxisMax(0.4);//设置y轴的最大值
seriesRenderer.setXAxisMin(0);//设置x轴起始值
seriesRenderer.setXAxisMax(11);//设置x轴最大值
seriesRenderer.setPanEnabled(true, false);
//颜色设置
seriesRenderer.setLabelsColor(0xFF85848D);//设置标签颜色
//缩放设置
seriesRenderer.setZoomButtonsVisible(false);//设置缩放按钮是否可见
seriesRenderer.setZoomEnabled(false); //图表是否可以缩放
seriesRenderer.setZoomInLimitX(7);
seriesRenderer.setZoomRate(7);//缩放比例
//图表移动
seriesRenderer.setPanEnabled(false);//图表是否可以移动

seriesRenderer.setPointSize(3);//设置坐标点大小
seriesRenderer.setXTitle(null);//设置x轴标题
seriesRenderer.setYTitle("百分比");//设置y轴标题
seriesRenderer.setMarginsColor(Color.WHITE);//设置外边距空间的颜色
seriesRenderer.setClickEnabled(false);
seriesRenderer.setChartTitle("深业上城项目各公司数据变化趋势图");
seriesRenderer.setYLabelsAlign(Align.LEFT);
seriesRenderer.setYLabels(0);//显示的x轴标签的个数
seriesRenderer.addYTextLabel(0.1, "10%");//针对特定的x轴值增加文本标签
seriesRenderer.addYTextLabel(0.2, "20%");//针对特定的x轴值增加文本标签
seriesRenderer.addYTextLabel(0.3, "30%");//针对特定的x轴值增加文本标签
seriesRenderer.addYTextLabel(0.4, "40%");//针对特定的x轴值增加文本标签
seriesRenderer.addYTextLabel(5, "50%");//针对特定的x轴值增加文本标签
seriesRenderer.addYTextLabel(6, "60%");//针对特定的x轴值增加文本标签
seriesRenderer.addYTextLabel(7, "70%");//针对特定的x轴值增加文本标签
seriesRenderer.addYTextLabel(8, "80%");//针对特定的x轴值增加文本标签
seriesRenderer.addYTextLabel(9, "90%");//针对特定的x轴值增加文本标签
seriesRenderer.addYTextLabel(10, "100%");//针对特定的x轴值增加文本标签
seriesRenderer.setXLabels(0);//显示的x轴标签的个数
seriesRenderer.setXLabelsPadding(4);
seriesRenderer.setXLabelsAngle(45);
seriesRenderer.setXLabelsAlign(Align.LEFT);
seriesRenderer.addXTextLabel(1, "公司舍业1");
seriesRenderer.addXTextLabel(2, "公司深夜三层2");
seriesRenderer.addXTextLabel(3, "公司3");
seriesRenderer.addXTextLabel(4, "公司4");
seriesRenderer.addXTextLabel(5, "公司5");
seriesRenderer.addXTextLabel(6, "公司6");
seriesRenderer.addXTextLabel(7, "公司7");
seriesRenderer.addXTextLabel(8, "公司8");
seriesRenderer.addXTextLabel(9, "公司9");
seriesRenderer.addXTextLabel(10, "公司10");
}

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
switch (buttonView.getId()){
case R.id.measured_box:
if (isChecked){
seriesRenderer.addSeriesRenderer(measuredSeriesRenderer);
seriesDataset.addSeries(measuredSeries);
chartView.repaint();
}else {
seriesDataset.removeSeries(measuredSeries);
seriesRenderer.removeSeriesRenderer(measuredSeriesRenderer);
chartView.repaint();
}
break;
case R.id.quality_box:
if (isChecked){
seriesRenderer.addSeriesRenderer(qualitySeriesRenderer);
seriesDataset.addSeries(qualitySeries);
chartView.repaint();
}else {
seriesDataset.removeSeries(qualitySeries);
seriesRenderer.removeSeriesRenderer(qualitySeriesRenderer);
chartView.repaint();}
break;
case R.id.safe_box:
if (isChecked){
seriesRenderer.addSeriesRenderer(safeSeriesRenderer);
seriesDataset.addSeries(safeSeries);
chartView.repaint();
}else {
seriesDataset.removeSeries(safeSeries);
seriesRenderer.removeSeriesRenderer(safeSeriesRenderer);
chartView.repaint();}
break;
}
}
}


代码中已经有了很详细的解释,这里我就不多说了,自己先做一个demo,然后集成到自己的项目中去,这里说一下集成过程中应该注意的几点:

seriesRenderer.addYTextLabel(0.1, "10%");//针对特定的x轴值增加文本标签
seriesRenderer.addYTextLabel(0.2, "20%");//针对特定的x轴值增加文本标签
seriesRenderer.addYTextLabel(0.3, "30%");//针对特定的x轴值增加文本标签
seriesRenderer.addYTextLabel(0.4, "40%");//针对特定的x轴值增加文本标签
seriesRenderer.addYTextLabel(5, "50%");//针对特定的x轴值增加文本标签
seriesRenderer.addYTextLabel(6, "60%");//针对特定的x轴值增加文本标签
seriesRenderer.addYTextLabel(7, "70%");//针对特定的x轴值增加文本标签
seriesRenderer.addYTextLabel(8, "80%");//针对特定的x轴值增加文本标签
seriesRenderer.addYTextLabel(9, "90%");//针对特定的x轴值增加文本标签
seriesRenderer.addYTextLabel(10, "100%");//针对特定的x轴值增加文本标签


这段代码是设置y轴的比例,还有一个问题就是在x轴数据较多的时候我们可以通过设置这两属性可以达到文字的排放

seriesRenderer.setXLabelsPadding(90);//设置下面文字之间的间距

seriesRenderer.setXLabelsAngle(-45);//设置倾斜度

好了由于时间有限,这个图标框架就说道这里了,该简单方便。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: