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

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. vscode源码分析【九】窗口里的主要元素

    第一篇: vscode源码分析[一]从源码运行vscode 第二篇:vscode源码分析[二]程序的启动逻辑,第一个窗口是如何创建的 第三篇:vscode源码分析[三]程序的启动逻辑,性能问题的追踪 ...

  2. kvm与xen虚拟化的比较(转)

    Linux虚拟化技术的用户目前有两种免费的开源管理程序可以选择:Xen和KVM. 作为较早出现的虚拟化技术,Xen是“第一类”运行在裸机上的虚拟化管理程序(Hypervisor),也是当前相当一部分商 ...

  3. 对并发Map的测试

    /** * ConcurrentHashMap效率最高 */ public class MapTest { public static void main(String[] args) throws ...

  4. Git分布式版本控制器使用

    前言: 使用Git版本控制器差不多有一年多的时间了,在这一年多的时间里对这个传说的的分布式版本控制工具有了一定的了解.在实战项目开发中,对关于如何在通过Git提交项目,以及如何使用Git命令对提交的文 ...

  5. [反汇编]函数开始部分利用mov ebx,esp找到返回地址(_KTRAP_FRAME结构)

    我们理解call原理,首先将返回地址压入栈中,之后执行调用. 因此,在一个函数开始部分,esp依旧是上一个栈帧的esp,此时esp指向返回地址. 这就意味着使用 mov ebx,esp,之后 [ebx ...

  6. java高并发系列 - 第4天:JMM相关的一些概念

    JMM(java内存模型),由于并发程序要比串行程序复杂很多,其中一个重要原因是并发程序中数据访问一致性和安全性将会受到严重挑战.如何保证一个线程可以看到正确的数据呢?这个问题看起来很白痴.对于串行程 ...

  7. 通过对象方法获取委托_C#反射获取委托_

    前言:时间紧,先写关键代码,以后优化: 在此感谢其他博友分享的文章,参考文章:C#反射委托创建器 1-定义含有委托的类: public class TimeCycle { /// <summar ...

  8. C#命名规则和设计规则

    Pascal 将每个单词的第一个字符大写.遇到两个字母的首字母缩略词时,两个字母都要大写 命名空间:使用公司名作为前缀.在第二级名称中使用稳定的与版本无关的产品名称 类型:名词或名词短语命名 结构:名 ...

  9. Nginx反向代理实现负载均衡以及session共享

    随着社会的发展和科技水平的不断提高,互联网在人们日常生活中扮演着越来越重要的角色,同时网络安全,网络可靠性等问题日益突出.传统的单体服务架构已不能满足现代用户需求.随之而来的就是各种分布式/集群式的服 ...

  10. JS基础语法---函数练习part1---5个练习

    练习1:求两个数字的和:获取任意的两个数字的和 function getSum(x, y) { return x + y; } console.log(getSum(10, 20)); 练习2:求1- ...