文档章节

achartengine图标框架的使用心得

星雨gg
 星雨gg
发布于 2016/09/22 16:29
字数 1435
阅读 33
收藏 0

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

本文转载自:http://blog.csdn.net/QQXIAOZHIJIANG/article/details/52071513

星雨gg
粉丝 1
博文 20
码字总数 3885
作品 0
程序员
私信 提问
android 用Achartengine 制作柱状图 设置图宽度无效

android 用Achartengine 制作柱状图 设置图宽度无效 最近使用Achartengine 制作柱状图,从网上查了很多资料,总算是要的结果出来了,可是在设置柱状图宽度时,怎么设置都无效,网上说使用ren...

心碎到心死
2014/06/28
1K
1
android走势图用什么好?

好像有个叫AChartEngine。我之前也自己实现过,是通过内存画图生成图片显示。但是显示效果不好。字体什么的模糊发虚。另外AChartEngine应该是基于SurfaceView画的吧。 我发现个问题,我之前在...

铂金小虫
2013/06/26
1K
0
【Android】报表、线图、饼图、柱状图 (工具整理)

1.achartengine(http://code.google.com/p/achartengine/) android 2. android-ski-report(http://code.google.com/p/android-ski-report/) 这个项目在Google Market也可以下载到。 3. c......

晨曦之光
2012/03/01
8.7K
3
android框架 achartengine 如何画一个移动的正弦波啊

android框架 achartengine 如何画一个移动的正弦波啊,或者其他方式实现也行,求大神给的demo

海洋清风
2017/03/12
160
2
关于achartengine 折线图

用achartengine 折线图如何实现图片上的功能

nihao1991
2014/07/31
1K
5

没有更多内容

加载失败,请刷新页面

加载更多

Java 脚本引擎入门

Java Script Engine Java 脚本引擎可以将脚本嵌入Java代码中,可以自定义和扩展Java应用程序,自JDK1.6被引入,基于Rhino引擎,JDK1.8后使用Nashorn引擎,支持ECMAScript 5,但后期还可能会换...

阿提说说
44分钟前
5
0
05.深入浅出索引(下)

在下面这个表T中,如果我们执行select * from T where k between 3 and 5,需要执行几次树的搜索操作,会扫描多少行? mysql> create table T ( id int primary key, k int not null default...

scgaopan
昨天
6
0
设计模式-中介者模式

设计模式-中介者模式 定义 用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互 UML 组成部分主要包含 Mediat...

木本本
昨天
5
0
Python 周刊第 418 期

新闻 PyCon US 2020 开始接受财务赞助! https://pycon.blogspot.com/2019/10/financial-aid-launches-for-pycon-us-2020.html2020年 Python 美国开发者大会,tips: 中国也有,可以赞助国内的...

iCodeBugs
昨天
5
0
ThreadLocal源码阅读

首先,从set方法入手, // ThreadLocalpublic void set(T value) { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t);//这里可以看出,从Threa......

小海bug
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部