achartengine图标框架的使用心得

废话不多说先贴效果图,跟代码,后面再详解:
效果图如下achartengine图标框架的使用心得_第1张图片
效果图如下achartengine图标框架的使用心得_第2张图片
由于项目公司数据保密性加了马赛克。贴代码
代码如下:

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);//设置倾斜度
好了由于时间有限,这个图标框架就说道这里了,该简单方便。

你可能感兴趣的:(achartengine图标框架的使用心得)