安卓图表:achartengine之动态柱状图(一)

目录

一、BarChart属性

二、BarChart的使用

三、案例

BarChart类:

MainActvity:

activity_main布局:

一、BarChart类的属性

属性名称功能
GraphicalView mGraphicalView用来获取柱状图
CategorySeries mCategorySeries柱形图每根柱子数据集
XYMultipleSeriesRenderer multipleSeriesRenderer柱形图形状定制器
SimpleSeriesRenderer mSeriesRenderer单组序列
XYMultipleSeriesDataset mDataset柱形图数据集
Context context上下文

GraphicalView mGraphicalView (用来获取柱状图) 的方法:

方法功能
repaint()重新画图

 XYMultipleSeriesRenderer multipleSeriesRenderer(柱形图形状定制器)的方法:

方法名称功能
setYAxisMax(int x)设置y轴的最大值
setXAxisMax(int x)设置x轴的最大值
setXAxisMin(int x)设置x轴的最小值
setYAxisMax(int x)设置y轴的最小值
setChartTitle(String s)设置柱状图的标题
setXTitle(String s)设置x轴的标题
setYTitle(String s)设置y轴的标题
setYLabels(int x)设置y轴的刻度值字体大小
setXLabels(int x)设置x轴的刻度值的字体大小
setLabelsColor(int x)设置标签字体的颜色
setYAxisTitleTextSize(int x)设置y轴的标题字体的大小
setXAxisTitleTextSize(int x)设置x轴的标题字体的大小
setChartTitleTextSize(int x)设置x轴的标题字体的大小
setLabelsTextSize(int x)设置标签字体的大小
setLegndTextSize(int x)设置图例文字的大小
setPanLimits(double[ ] panLimits)设置图形可以拖动的范围
setZoomEnabled(boolean b)是否可以放大缩小
setBarSpacing(double d)设置每个柱之间的间隔
setShowGrid(boolean b)是否显示网格
setFitLegend(boolean b)是否设置合适的图例
setAxesColor(int c)设置坐标轴的颜色
setGridColor(int c)设置网格的颜色
setBackgroundColor(int c)设置坐标轴的背景颜色
setMarginColor(int c)设置边距背景色

addSeriesRender(SimpleSeriesRenderer s)

添加渲染器

 CategorySeries mCategorySeries(柱形图每根柱子数据集)的方法:

方法功能
clear()清空数据集
add(double d)添加数据

二、BarChart的使用步骤

(一)、获取取布局器和创建BarChart对象

(二)、设置渲染器和设置数据集

(三)、获取柱状图,并将其添加到布局器中

(四)、使用定时器和Handler实现更新数据

三、案例

 效果图:

动态柱状图

BarChart类:

import android.content.Context;
import android.graphics.Color;
import android.graphics.Paint;
import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.BarChart;
import org.achartengine.model.CategorySeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.renderer.SimpleSeriesRenderer;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;

public class Barchart {
    // 柱状图
    private GraphicalView mGraphicalView;
    /**
     *mCategorySeries:柱形图每根柱子数据集
     */
    private CategorySeries mCategorySeries ;
    /**
     *mRenderer:柱形图形状定制器
     */
    private XYMultipleSeriesRenderer multipleSeriesRenderer;
    /**
     *mDataset:柱形图数据集
     */
    private XYMultipleSeriesDataset mDataset;
    /**
     *mSeriesRenderer:单组序列(柱形图允存在多组同一类型的柱形图数据)
     */
    private SimpleSeriesRenderer mSeriesRenderer;
    private Context context;

    public Barchart(Context context){
        this.context = context;
    }
    // 获取图表
    public GraphicalView getGraphicalView(){
        mGraphicalView = ChartFactory.getBarChartView(context,mDataset, multipleSeriesRenderer, BarChart.Type.DEFAULT);
        return mGraphicalView;
    }
    /**
     * 获取数据集,及xy坐标的集合
     *
     * @param curveTitle   柱状图名称
     */
    public void setXYMultipleSeriesDataset(String curveTitle){
        mDataset = new XYMultipleSeriesDataset();
        mCategorySeries = new CategorySeries(curveTitle);
        mDataset.addSeries(mCategorySeries.toXYSeries());
    }

    /**
     * 获取渲染器
     *
     * @param maxX
     *            x轴最大值
     * @param maxY
     *            y轴最大值
     * @param chartTitle
     *            柱状图的标题
     * @param xTitle
     *            x轴标题
     * @param yTitle
     *            y轴标题
     * @param axeColor
     *            坐标轴颜色
     * @param labelColor
     *            标题颜色
     * @param curveColor
     *            柱子的颜色
     * @param gridColor
     *            网格颜色
     */
    public void setXYMultipleSeriesRenderer(double maxX, double maxY,
                                            String chartTitle, String xTitle, String yTitle, int axeColor,
                                            int labelColor, int curveColor, int gridColor) {

        multipleSeriesRenderer = new XYMultipleSeriesRenderer();
        if (chartTitle!=null){
            multipleSeriesRenderer.setChartTitle(chartTitle);
        }
        multipleSeriesRenderer.setXAxisMax(maxX);
        multipleSeriesRenderer.setYAxisMax(maxY);
        multipleSeriesRenderer.setYAxisMin(0);
        multipleSeriesRenderer.setXAxisMin(0);
        // 渲染器容器
        multipleSeriesRenderer.setXTitle(xTitle);
        multipleSeriesRenderer.setYTitle(yTitle);
        // 标题颜色
        multipleSeriesRenderer.setLabelsColor(labelColor);
        multipleSeriesRenderer.setXLabels(10);
        multipleSeriesRenderer.setYLabels(10);
        multipleSeriesRenderer.setXLabelsAlign(Paint.Align.LEFT);
        multipleSeriesRenderer.setYLabelsAlign(Paint.Align.LEFT);
        // 设置坐标轴的标题字体大小
        multipleSeriesRenderer.setAxisTitleTextSize(20);
        // 设置坐标轴的标题大小
        multipleSeriesRenderer.setChartTitleTextSize(20);
        multipleSeriesRenderer.setLabelsTextSize(20);
        multipleSeriesRenderer.setLegendTextSize(20);
        multipleSeriesRenderer.setPanLimits(new double[]{0,128,0,0});
        multipleSeriesRenderer.setZoomEnabled(true);
        multipleSeriesRenderer.setBarSpacing(0.5f);
        multipleSeriesRenderer.setShowGrid(true);
        multipleSeriesRenderer.setFitLegend(true);
        multipleSeriesRenderer.setAxesColor(axeColor);
        multipleSeriesRenderer.setGridColor(gridColor);
        multipleSeriesRenderer.setBackgroundColor(Color.WHITE);//背景色
        multipleSeriesRenderer.setMarginsColor(Color.WHITE);//边距背景色,默认背景色为黑色,这里修改为白色
        mSeriesRenderer = new XYSeriesRenderer();
        mSeriesRenderer.setColor(curveColor);
        multipleSeriesRenderer.addSeriesRenderer(mSeriesRenderer);
    }
    /**
     * 更新数据,柱形图颜色
     */
    public void updateChart(double[]amplitude) {
        mDataset.clear();
        mCategorySeries.clear();
        multipleSeriesRenderer.removeSeriesRenderer(mSeriesRenderer);
        mSeriesRenderer = new XYSeriesRenderer();
        mSeriesRenderer.setColor(Color.RED);
//        mRenderer.setPanEnabled(true, false);
        multipleSeriesRenderer.addSeriesRenderer(mSeriesRenderer);

        for (int k = 0; k < amplitude.length; k++) {
            mCategorySeries.add(amplitude[k]);
        }
//        mRenderer.setDisplayChartValues(true);
        mDataset.addSeries(mCategorySeries.toXYSeries());
        mGraphicalView.repaint();
    }


}

MainActvity:

import java.util.Timer;
import java.util.TimerTask;
import org.achartengine.GraphicalView;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.ViewGroup;
import android.widget.LinearLayout;

/**
 * <Description functions in a word>
 * 动态更新柱形图数据
 * <Detail description>
 */
public class MainActivity extends Activity {
    /**
     *mChartView:显示BarChart
     */
    private GraphicalView mChartView;
    /**
     *mHandler:消息通讯器
     */
    private Handler mHandler;
    /**
     *timer:定时器
     */
    private Timer timer = new Timer();// 设计定时器
    private Context mContext;
    private Barchart mBarchart;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContext = getApplicationContext();
        // 1、获取布局器和创建BarChart对象
        LinearLayout mLinear = (LinearLayout) findViewById(R.id.chart);
        mBarchart = new Barchart(mContext);
        // 2、设置数据集和渲染器
        mBarchart.setXYMultipleSeriesDataset("动态柱状图");
        mBarchart.setXYMultipleSeriesRenderer(256,100,"测试","x轴名称","y轴名称",
                Color.RED, Color.RED, Color.RED, Color.BLACK);
        // 3、获取柱状图,并将其放进布局器中
        mChartView = mBarchart.getGraphicalView();
        mLinear.addView(mChartView,new ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
//        mLinear.setBackgroundColor(Color.BLACK);

        // 使用定时器和Handler实现柱状图更新数据
        mHandler = new Handler() {// 这里的Handler实例将配合下面的Timer实例,完成定时更新图表的功能
            @Override
            public void handleMessage(Message msg) {
                if (msg.what == 1) {
                    mBarchart.updateChart();// 刷新图表具体方法 Handler将此并入主线程
                }
                super.handleMessage(msg);
            }
        };
        TimerTask task = new TimerTask() {
            @Override
            public void run() {// 通过消息更新
                Log.i("qiuzhping", " task ok ");
                Message message = new Message();
                message.what = 1;// 消息定义标志
                mHandler.sendMessage(message);
            }
        };

        timer.schedule(task, 100, 200 );// 执行任务
    }

    @Override
    public void onDestroy() {
        if (timer != null) {
            // 取消定时器
            timer.cancel();
        }
        super.onDestroy();
    }
}

activity_main布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:id="@+id/chart"
        android:orientation="vertical" />

</LinearLayout>

动态饼图:

安卓图表:使用achartengine做动态饼图 (二)-CSDN博客

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值