Android开发 绘制曲线图 AchartEngine使用

本文介绍了如何在Android应用中使用AchartEngine库来绘制曲线图。通过在布局文件中添加LinearLayout,并配置相关参数,可以实现曲线图的显示。此外,还提及了如何在显示的点上添加文字坐标值及其大小设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.首先在布局文件中加入LinearLayout布局,如下:

    <LinearLayout android:id="@+id/chart" 
		 android:orientation="horizontal"
		 android:layout_width="fill_parent" 
		 android:layout_height="fill_parent"
		 android:background="@color/white"
		 android:layout_weight="1"
		 />

2.写一个类,封装了绘图工具

package com.jinbi.app.utils;

import java.util.Random;

import org.achartengine.chart.PointStyle;
import org.achartengine.model.CategorySeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;

import android.graphics.Color;
import android.graphics.Paint.Align;

public class DrawableUtil {
	 
	 /**获取数据  
	 * @return 返回XYMultipleSeriesDataset
	 * @yData  设置y轴的数据
	 */
	public static XYMultipleSeriesDataset getBarDemoDataset(double[] yData){
        XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
        final int nr = yData.length;
        CategorySeries series = new CategorySeries("Demo series " + 1);
        
        for (int k = 0; k < nr; k++){
        	series.add(yData[k]);
        }
        dataset.addSeries(series.toXYSeries());
        return dataset;
	}
	 
    public static XYMultipleSeriesRenderer getBarDemoRenderer(String[] date,double yStart,double yEnd) {
        XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
        XYSeriesRenderer r = new XYSeriesRenderer();
        r.setColor(Color. BLUE );
        renderer.addSeriesRenderer(r);
        r.setPointStyle(PointStyle.CIRCLE);//点的类型是圆形  
        r.setFillPoints(true);//设置点是否实心  
        setChartSettings(renderer, date, yStart, yEnd);
        return renderer;
     }
	 
    public static void setChartSettings(XYMultipleSeriesRenderer renderer,String[] dates,double yStart,double yEnd) {
    	int i = 1;
    	renderer.setMargins(new int[] { 50, 50, 50, 0 });          //设置图表的外边框(上/左/下/右)  
    	renderer.setApplyBackgroundColor(true);                    //设置是否显示背景色
    	renderer.setBackgroundColor(Color.argb(00, 265, 265, 265));//设置背景颜色
    	renderer.setAxisTitleTextSize(16);                         //设置轴标题文字的大小
    	renderer.setChartTitleTextSize(10);                        //设置整个图表标题文字大小  
    	renderer.setLabelsTextSize(22);                            //设置刻度显示文字的大小(XY轴都会被设置)  
    	renderer.setLegendTextSize(15);                            //图例文字大小  
    	renderer.setZoomButtonsVisible(false);                     //是否显示放大缩小按钮 
    	renderer.setPointSize(5);                                  //设置点的大小(图上显示的点的大小和图例中点的大小都会被设置) 
        renderer.setXAxisMin(0);                                   //设置X轴的最小值
        renderer.setXAxisMax(8);                                   //设置X轴的最大值
        renderer.setYAxisMin(yStart);                              //设置Y轴的最小值
        renderer.setYAxisMax(yEnd);                                //设置Y轴的最大值
        renderer.setAxesColor(Color.GREEN);                        //设置X轴的颜色
        renderer.setLabelsColor(Color.GREEN);                      //设置Y轴的颜色
        renderer.setXLabels(6);                                    //设置x轴显示6个点,根据setChartSettings的最大值和最小值自动计算点的间隔  
        renderer.setYLabels(8);                                    //设置y轴显示6个点,根据setChartSettings的最大值和最小值自动计算点的间隔  
        renderer.setShowGridY(false);                              //是否显示Y网格  
        renderer.setShowGridX(true);                               //是否显示X方向的网格
        renderer.setGridColor(Color.GRAY);                         //设置网格的颜色
        renderer.setXLabelsAlign(Align.CENTER);                     //刻度线与刻度标注之间的相对位置关系
        renderer.setYLabelsAlign(Align.RIGHT);                     //刻度线与刻度标注之间的相对位置关系  
        renderer.setZoomButtonsVisible(false);                     //是否显示放大缩小按钮  
        renderer.setPanEnabled(false, true);                      //设置是否允许XY轴方向移动
        renderer.setShowLegend(false);                             //设置是否显示图例
        renderer.setMarginsColor(Color.WHITE);                     // 设置外框颜色穿透背景色
        renderer.setXLabelsAngle(-25);                             // 设置X轴标签倾斜角度(clockwise degree)
        renderer.setXLabels(0);                                    // 设置X轴不显示数字(改用我们手动添加的文字标签)
        for (String date:dates){
        	renderer.addTextLabel(i, date);                        //修改X轴显示坐标
        	i++;
        }
     }
}

3.在Activity中加入代码,显示出控件

XYMultipleSeriesRenderer renderer = DrawableUtil.getBarDemoRenderer(date,yStart,yEnd);
		layout = (LinearLayout) findViewById(R.id.chart);       //绑定控件  
		layout.removeAllViews();                                //这个方法是用来辅助实现刷新功能
		mChartView = ChartFactory.getTimeChartView(this, DrawableUtil.getBarDemoDataset(yData), renderer, "MM/dd");  
        layout.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); 

这样就可以在LinearLayout控件中将图标显示出来了。当然还有些细节需要自己处理!

4.补充:

       1、增加需求:显示的点上加文字

               renderer.setDisplayChartValues(true);                //显示点的坐标值

               XYSeriesRenderer.setChartValuesTextSize(25);    //设置点的文字大小

        

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值