Android开发技术网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
Android新手教程 Android开发经验 Android开发资讯
Android开发问答 Android实例教程 Framework底层开发
  Android开发资料网 -> Android开发经验 -> 关于achartengine的使用一些小经验 -> 正文阅读
Android开发经验 最新文章
ScrollView布局里面嵌套viewpager,viewpag
有没有大神做过类似应用安卓市场这种应用或
如何让dialog充满屏幕的宽?
内存泄露从入门到精通三部曲之基础知识篇
android访问远程数据库
【双11预告】极客学院最惠玩儿,小米插线板
分享个免费的翻墙插件
隐藏输入键盘
android在ScrollView和listview中使用achar
关于achartengine的使用一些小经验

[Android开发经验]关于achartengine的使用一些小经验

  2015-01-21 10:58:45
首页 本页[1] 下一页[2] 尾页[2] [放入我的收藏夹]
最近项目上要使用图表,便开始在网上找各种图表架包,好看的都是收费的,最后还是决定用google的achartengine.achartengine使用起来还算好,就是修改样式很烦.下面就分享下开发经验吧.
所有的chart都分两块,一块是Renderer(如XYMultipleSeriesRenderer,我的理解是,这个renderer为视图render的模板,就是你想用什么图标,一个图图表基本分2层,这个是最下面一层),一块是Dataset(如XYMultipleSeriesDataset,用于对视图数值的处理).
这边我就拿折线图举例吧.
首先需要
        XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();//创建你需要的图表最下面的图层
        XYSeriesRenderer seriesRenderer = new XYSeriesRenderer();//创建你需要在图层上显示的具体内容的图层
        mRenderer.addSeriesRenderer(seriesRenderer);//添加进去
        XYMultipleSeriesDataset mDataset = new XYMultipleSeriesDataset()//创建数据层
        XYSeries series = new XYSeries("标题");//创建具体的数据层
        series .add(x, y);//添加数据,一般都是for循环数据不断操作这一步添加的
        mDataset.addSeries(series);
      然后调用ChartFactory.getLineChartIntent(context, mDataset, mRenderer),得到一个Intent类型的intent,startActivity(intent)就能得到图表了.这边需要在AndroidManifest.xml加上<activity android:name="org.achartengine.GraphicalActivity" />.这边是跳界面查看图表,是全屏的.ChartFactory可以得到很多视图,ChartFactory.getBarChartIntent(context, dataset, renderer, type, activityTitle)就可以得到一个柱状图.以此类推啊.
有时候项目中开发,需要在界面的某一块展示视图,这时候我们可以通过 ChartFactory.getLineChartView(context, mDataset, mRenderer)得到一个GraphicalView类型的视图.(这边就不要需要在AndroidManifest.xml加上<activity android:name="org.achartengine.GraphicalActivity" />.)
其实图表的使用流程就是这样.但要做一个自己想要的视图,就需要设置mRenderer 的样式,seriesRenderer 的样式.
mRenderer样式设置:
        mRenderer.setShowAxes(false);//设置是否需要显示坐标轴
        mRenderer.setXAxisMin(1.3d);//设置X轴最小值
        mRenderer.setXAxisMax(10d);//设置X轴最大值
        mRenderer.setYAxisMin(0d); //设置Y轴最小值
        mRenderer.setYAxisMax(maxY + maxY / 6); // 设置Y轴最大值
        mRenderer.setChartTitleTextSize(0);//设置图表标题字体大小,我这边设置0是把标题隐藏掉
        mRenderer.setYLabels(7);//设置Y轴标签数
        mRenderer.setExternalZoomEnabled(true);//设置是否可以缩放
        mRenderer.setZoomInLimitY(maxY + maxY / 6);//设置Y轴最大缩放限
        mRenderer.setZoomInLimitX(5);//设置X轴最大缩放限
        mRenderer.setPanEnabled(true, false);//设置滑动,这边是横向可以滑动,竖向不可滑动
        mRenderer.setXLabels(XLabel.size() - 1);//设置X标签数量
        mRenderer.setXLabelsPadding(200);//设置标签的间距
        mRenderer.setXLabelsAngle(-45f);//设置标签倾斜度
        for (int i = 0; i < XLabel.size(); i++)
        {
            mRenderer.addXTextLabel(i, XLabel.get(i));//这边是自定义自己的标签,显示自己想要的X轴的标签,需要注意的是需要setXLabels(0)放在标签重叠(就是自定义的标签与图表默认的标签)
        }      
        mRenderer.setPanLimits(new double[] {0, (XLabel.size()) * 2, 0, maxY});//设置滑动范围,这边我很好奇他的单位,一直有点小问题
        mRenderer.setAxesColor(context.getResources().getColor(R.color.text_hui));//设置数轴的颜色
        mRenderer.setGridColor(context.getResources().getColor(R.color.text_hui999999)); //设置网格的颜色   
        mRenderer.setShowGrid(true); /设置是否需要显示网格
        mRenderer.setYTitle(label);//设置Y轴标题
        mRenderer.setLabelsColor(Color.BLACK);//设置标签颜色
        mRenderer.setYLabelsAlign(Align.LEFT, 0);//设置标签居Y轴的方向
        mRenderer.setAxisTitleTextSize(20);
        mRenderer.setYLabelsColor(0, context.getResources().getColor(R.color.text_hui));        mRenderer.setLabelsTextSize(14);
        mRenderer.setZoomLimits(new double[] {0, maxX * 5, 0, maxY + maxY / 6});//设置缩放限制,setZoomInLimitY等一样
        mRenderer.setXLabelsColor(context.getResources().getColor(R.color.text_hui));
        mRenderer.setMarginsColor(context.getResources().getColor(R.color.chart_bg));//设置画布距数轴之间的颜色
        mRenderer.setZoomRate(1.4f);//放大几倍
seriesRenderer设置部分:
        seriesRenderer.setFillBelowLine(false); // 设置折线下方是否填充
        seriesRenderer.setFillBelowLineColor(context.getResources().getColor(R.color.chart_content_color));//填充色
        seriesRenderer.setPointStyle(PointStyle.CIRCLE); /折线点的样式
        seriesRenderer.setPointStrokeWidth(5f);//折线点的大小
        seriesRenderer.setDisplayChartValues(true);//设置显示折线的点对应的值
        seriesRenderer.setChartValuesTextSize(16);
        seriesRenderer.setColor(Color.BLUE);
        seriesRenderer.setChartValuesSpacing(7);
        seriesRenderer.setLineWidth(3.0f)//折线宽度
        seriesRenderer.setDisplayChartValuesDistance(5);///折线点的值距离折线点的距离
        seriesRenderer.setChartValuesTextAlign(Align.RIGHT);
        DecimalFormat df1 = new DecimalFormat(".00");
        seriesRenderer.setChartValuesFormat(df1);//设置折线点的值的格式,显示小数点后2位
大体就是这样,这边举例的是折线图,其实柱状图也是这样的流程.可以参考demo,样式我只能提供这么多了.一句话,不管什么视图,流程都是这个流程.
如果有啥不对的,欢迎指出,不能把错的分享给别人了,嘿嘿.

七步天 发表于 2014-11-11 20:36
ChartFactory.getLineChartView(context, mDataset, mRenderer),返回的是一个view,布局上可以随便add进 ...
一个LinearLayout可以装几个图表?我也试过可是总会出异常,然后我就想:一个LinearLayout装一个,LinearLayout作为容器。。。这是我的总结:http://www.eoeandroid.com/thread-553063-1-1.html

七步天 发表于 2015-1-20 14:20
mRenderer.setZoomLimits(new double[] {0, maxX * 5, 0, maxY + maxY / 6});//设置缩放限制,setZoomInLi ...
还有啊  我设置了mRenderer.setPanEnabled(true, true);为什么还是不能上下拖动

yuanyiyun 发表于 2015-1-20 17:00
还有啊  我设置了mRenderer.setPanEnabled(true, true);为什么还是不能上下拖动
mRenderer.setPanLimits(new double[] {0, (XLabel.size()) * 2, 0, maxY});你是不是设置了这个?

不错注释相当到位         

写得非常得具体

不知道LZ有没有兴趣,我这有个新需求,就是在achartengine框架的基础上稍微改造下个功能,有兴趣的话可以跟我聊263330552,能做的话在谈RMB,加我注明eoe“achartengine”改造

写得非常得具体

jihk1 发表于 2014-5-29 16:35
不错注释相当到位
谢谢.

chaossun 发表于 2014-8-20 16:25
写得非常得具体
谢谢

API_Cloud 发表于 2014-9-2 15:35
写得非常得具体
谢谢

总结的很好。。可是怎么在一个界面上放多个图表呢。。

1248254239 发表于 2014-11-11 14:51
总结的很好。。可是怎么在一个界面上放多个图表呢。。
ChartFactory.getLineChartView(context, mDataset, mRenderer),返回的是一个view,布局上可以随便add进去啊.

1248254239 发表于 2014-11-11 21:18
一个LinearLayout可以装几个图表?我也试过可是总会出异常,然后我就想:一个LinearLayout装一个,Linear ...
看过了,你那样也是可以的.

请问楼主 怎么限制x轴的最大放大倍数

yuanyiyun 发表于 2015-1-20 12:13
请问楼主 怎么限制x轴的最大放大倍数
mRenderer.setZoomLimits(new double[] {0, maxX * 5, 0, maxY + maxY / 6});//设置缩放限制,setZoomInLimitY等一样
要注意看上面的注释啊,里面都有的

七步天 发表于 2015-1-20 14:20
mRenderer.setZoomLimits(new double[] {0, maxX * 5, 0, maxY + maxY / 6});//设置缩放限制,setZoomInLi ...
你这个x轴是double 如果是时间怎么设置

首页 本页[1] 下一页[2] 尾页[2] [放入我的收藏夹]
上一篇文章      下一篇文章      查看所有文章
2015-01-21 10:58:20  
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2018年6日历
2018-6-19 14:35:48
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  Android开发资料网