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 生肖星座解梦
 三沣玩客 三沣拍拍 视频热点 软件开发资料 Android开发资料 站长资讯网 古典小说 网文精选 搜图网 天下美图 中国文化英文网站 多播视频
 2017-4-27 1:37:57
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  Android开发资料网