最近做项目要用到图表,在网上找相关的解决方案找了很久,搜到最多的就是这个框架,所以就开始研究下怎么使用,首先研究的就是折线图,如是做了一个实例。

AChartEngine下载地址:http://code.google.com/p/achartengine/downloads/list 。

先简单描述下这个例子:用开源的图表框架AChartEngine的折线图显示最近7天的最高气温变化趋势。

最终效果如下图(手机分辨率800*480,4寸大小):

布局文件activity_line_chart.xml:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#ffffffff"
tools:context=".MainActivity" > <LinearLayout android:id="@+id/chart"
android:orientation="horizontal"
android:background="#ffffff"
android:splitMotionEvents="false"
android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1"/> </LinearLayout>

java代码文件MainActivity.java:

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 android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.Paint.Align;
import android.widget.LinearLayout; public class MainActivity extends Activity {
LinearLayout chart;
GraphicalView chartView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_line_chart);
chart = (LinearLayout) findViewById(R.id.chart);
showChart();
}
private void showChart() {
XYMultipleSeriesDataset mDataSet=getDataSet();
XYMultipleSeriesRenderer mRefender=getRefender();
chartView=ChartFactory.getLineChartView(this, mDataSet, mRefender);
chart.addView(chartView);
}
private XYMultipleSeriesDataset getDataSet() {
XYMultipleSeriesDataset seriesDataset=new XYMultipleSeriesDataset();
XYSeries xySeries1=new XYSeries("北京最近7天最高温度变化趋势");
xySeries1.add(, );
xySeries1.add(, );
xySeries1.add(, );
xySeries1.add(, );
xySeries1.add(, );
xySeries1.add(, );
xySeries1.add(, );
seriesDataset.addSeries(xySeries1); XYSeries xySeries2=new XYSeries("北京最近7天最低温度变化趋势");
xySeries2.add(, );
xySeries2.add(, );
xySeries2.add(, );
xySeries2.add(, );
xySeries2.add(, );
xySeries2.add(, );
xySeries2.add(, );
seriesDataset.addSeries(xySeries2); return seriesDataset;
}
private XYMultipleSeriesRenderer getRefender() {
/*描绘器,设置图表整体效果,比如x,y轴效果,缩放比例,颜色设置*/
XYMultipleSeriesRenderer seriesRenderer=new XYMultipleSeriesRenderer(); seriesRenderer.setChartTitleTextSize();//设置图表标题的字体大小(图的最上面文字)
seriesRenderer.setMargins(new int[] { , , , });//设置外边距,顺序为:上左下右
//坐标轴设置
seriesRenderer.setAxisTitleTextSize();//设置坐标轴标题字体的大小
seriesRenderer.setYAxisMin(-);//设置y轴的起始值
seriesRenderer.setYAxisMax();//设置y轴的最大值
seriesRenderer.setXAxisMin(0.5);//设置x轴起始值
seriesRenderer.setXAxisMax(7.5);//设置x轴最大值
seriesRenderer.setXTitle("日期");//设置x轴标题
seriesRenderer.setYTitle("温度");//设置y轴标题
//颜色设置
seriesRenderer.setApplyBackgroundColor(true);//是应用设置的背景颜色
seriesRenderer.setLabelsColor(0xFF85848D);//设置标签颜色
seriesRenderer.setBackgroundColor(Color.argb(, , , ));//设置图表的背景颜色
//缩放设置
seriesRenderer.setZoomButtonsVisible(false);//设置缩放按钮是否可见
seriesRenderer.setZoomEnabled(false); //图表是否可以缩放设置
seriesRenderer.setZoomInLimitX();
// seriesRenderer.setZoomRate(1);//缩放比例设置
//图表移动设置
seriesRenderer.setPanEnabled(false);//图表是否可以移动 //legend(最下面的文字说明)设置
// seriesRenderer.setShowLegend(true);//控制legend(说明文字 )是否显示
// seriesRenderer.setLegendHeight(80);//设置说明的高度,单位px
// seriesRenderer.setLegendTextSize(16);//设置说明字体大小
//坐标轴标签设置
seriesRenderer.setLabelsTextSize();//设置标签字体大小
seriesRenderer.setXLabelsAlign(Align.CENTER);
seriesRenderer.setYLabelsAlign(Align.LEFT);
seriesRenderer.setXLabels();//显示的x轴标签的个数
seriesRenderer.addXTextLabel(, "6/24");//针对特定的x轴值增加文本标签
seriesRenderer.addXTextLabel(, "6/25");
seriesRenderer.addXTextLabel(, "6/26");
seriesRenderer.addXTextLabel(, "6/27");
seriesRenderer.addXTextLabel(, "6/28");
seriesRenderer.addXTextLabel(, "6/29");
seriesRenderer.addXTextLabel(, "今天");
seriesRenderer.setPointSize();//设置坐标点大小 seriesRenderer.setMarginsColor(Color.WHITE);//设置外边距空间的颜色
seriesRenderer.setClickEnabled(false);
seriesRenderer.setChartTitle("北京最近7天温度变化趋势图"); /*某一组数据的描绘器,描绘该组数据的个性化显示效果,主要是字体跟颜色的效果*/
XYSeriesRenderer xySeriesRenderer1=new XYSeriesRenderer();
xySeriesRenderer1.setAnnotationsColor(0xFFFF0000);//设置注释(注释可以着重标注某一坐标)的颜色
xySeriesRenderer1.setAnnotationsTextAlign(Align.CENTER);//设置注释的位置
xySeriesRenderer1.setAnnotationsTextSize();//设置注释文字的大小
xySeriesRenderer1.setPointStyle(PointStyle.CIRCLE);//坐标点的显示风格
xySeriesRenderer1.setPointStrokeWidth();//坐标点的大小
xySeriesRenderer1.setColor(0xFFF46C48);//表示该组数据的图或线的颜色
xySeriesRenderer1.setDisplayChartValues(false);//设置是否显示坐标点的y轴坐标值
xySeriesRenderer1.setChartValuesTextSize();//设置显示的坐标点值的字体大小 /*某一组数据的描绘器,描绘该组数据的个性化显示效果,主要是字体跟颜色的效果*/
XYSeriesRenderer xySeriesRenderer2=new XYSeriesRenderer();
xySeriesRenderer2.setPointStyle(PointStyle.CIRCLE);//坐标点的显示风格
xySeriesRenderer2.setPointStrokeWidth();//坐标点的大小
xySeriesRenderer2.setColor(0xFF00C8FF);//表示该组数据的图或线的颜色
xySeriesRenderer2.setDisplayChartValues(false);//设置是否显示坐标点的y轴坐标值
xySeriesRenderer2.setChartValuesTextSize();//设置显示的坐标点值的字体大小 seriesRenderer.addSeriesRenderer(xySeriesRenderer1);
seriesRenderer.addSeriesRenderer(xySeriesRenderer2);
return seriesRenderer;
}
}

遇到的问题:

  1.图表中显示文字(图表标题,XY轴标签,说明文字)的大小单位是像素,会导致在高像素密度的设备上显示的字体非常小,在低像素密度的设备上显示字体偏大的情况,这个问题目前还不知道怎么解决。

  2.还有就是已经设置了禁止缩放:

seriesRenderer.setZoomEnabled(false);

但是实际运行的效果是通过双指进行操作竟然能够缩放。

源码下载

补充:

把某个坐标点标注出来,比如说把最高气温(1,36)这个坐标着重标注出来。

XYSeries seriesAt = mDataSet.getSeriesAt();//mDataSet为数据设置器XYMultipleSeriesDataset
seriesAt.addAnnotation("最高", , );

效果如下(xiaomi3截屏):

AChartEngine折线图实例的更多相关文章

  1. JFreeChart绘制折线图实例

    JFreeChart是JAVA平台上的一个开放的第三方图表绘制类库.只要下载JFreeChart的类库,导入项目即可使用.下面是一个绘制折线图的实例.各处注释都已经写的比较清晰了. package c ...

  2. python中matplotlib画折线图实例(坐标轴数字、字符串混搭及标题中文显示)

    最近在用python中的matplotlib画折线图,遇到了坐标轴 "数字+刻度" 混合显示.标题中文显示.批量处理等诸多问题.通过学习解决了,来记录下.如有错误或不足之处,望请指 ...

  3. 最牛逼android上的图表库MpChart(二) 折线图

    最牛逼android上的图表库MpChart二 折线图 MpChart折线图介绍 MpChart折线图实例 MpChart效果 最牛逼android上的图表库MpChart(二) 折线图 最近工作中, ...

  4. Android图表引擎AChartEngine之折线图使用

    最近在帮老师做一个课题,其中app端需要显示折线图以便直观地看数据波动,上网查了些资料后发现了这款图标引擎,另外感谢李坤老师的博客,帮助很大. 废话不多说,下面写代码. 一.AChartEngine是 ...

  5. achartengine画出动态折线图

    achartengine画出动态折线图的效果最近有个项目需要用到实时曲线图,我也上网搜索了一下,最后还是选择使用achartengine这个现成的东西,毕竟自己再canvas一下实在是太麻烦,而且项目 ...

  6. AChartEngine 安卓折线图 柱形图等利器

    http://www.eoeandroid.com/thread-548233-1-6.html 最近公司项目中要用到折线图,状态类型的图标要用到折线图,柱形图等,并且能够动态显示,在网上找了许多de ...

  7. 安卓图表引擎AChartEngine(三) - 示例源码折线图、饼图和柱状图

    折线图: package org.achartengine.chartdemo.demo.chart; import java.util.ArrayList; import java.util.Lis ...

  8. Android AChartEngine 去除折线图黑边

    通常使用AChartEngine画出的折线图,如果背景不是黑色,则会在折线图的坐标轴旁边出现黑边,如图所示: 试了好多设置,最后终于发现,去除黑边的设置是: mRenderer.setMarginsC ...

  9. 使用achartengine实现自定义折线图 ----附代码 调试OK

    achartengine作为android开发中最常用的实现图标的开源框架,使用比较方便,参考官方文档谢了如下Demo,实现了自定义折线图. package edu.ustb.chart; impor ...

随机推荐

  1. Django restful framework中自动生成API文档

    自动生成api文档(不管是函数视图还是类视图都能显示) 1.安装rest_framework_swagger库 pip install django-rest-swagger 2.在项目下的 urls ...

  2. Ubuntu更新python3.5到python3.7

    一 下载wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1rc2.tgz 二 解压tar zxvf Python-3.7.1rc2.tg ...

  3. ubuntu18.04 中个性化配置vim方法

    1:新建配置文件 在终端里输入:vi ~/.vimrc (vimrc是vim的配置文件,每次打开vim时会自动加载这个文件里的配置) 2:配置的代码如下:直接就可以复制到里面然后保存就行 set ai ...

  4. Python自动群发邮件,只需20行代码!

    今日分享 Python自动群发邮件 import smtplib from email import (header) from email.mime import (text, applicatio ...

  5. js的事件循环(Event Loop)

    (本文从掘金小册整理) 首先介绍一下几个概念 进程与线程 相信大家经常会听到 JS 是单线程执行的,但是你是否疑惑过什么是线程? 讲到线程,那么肯定也得说一下进程.本质上来说,两个名词都是 CPU 工 ...

  6. 【Linux命令】系统状态检测命令8个(ifconfig、uname、uptime、free、who、last、history、sosreport)

    目录 ifconfig获取网卡配置信息 uname查看系统内核版本 uptime查看系统的负载信息 free查看内存信息 who查看当前主机用户的终端信息 last查看系统的登录记录 history查 ...

  7. 10-Django中间件

    中间件 Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入和输出. 中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Djang ...

  8. js的promise

    转载自: https://segmentfault.com/a/1190000007032448#articleHeader16 一 前言 本文主要对ES6的Promise进行一些入门级的介绍.要想学 ...

  9. OpenGL光照2:材质和光照贴图

    本文是个人学习记录,学习建议看教程 https://learnopengl-cn.github.io/ 非常感谢原作者JoeyDeVries和多为中文翻译者提供的优质教程 的内容为插入注释,可以先跳过 ...

  10. ABAP ALV显示前排序合并及布局显示

    有时候会有用户要求显示出来的ALV立即就是升序或者降序,或者是上下同一个字段值一样的情况显示一次,如 变为 这个时候内表用SORT有时候会不好用,可以使用函数 REUSE_ALV_GRID_DISPL ...