AChartEngine应用之BarChart(动态柱形图)

 AChartEngine应用之BarChart(动态柱形图)

      构建动态柱形图,官方的API并没有提供可以借鉴的动态柱形图的方法,考虑到数据都是活动的,不可能总是用静态数据,具体是通过定时器+Handler实现定时任务,通过Handler更新主线程UI,在更新之前要把之前的数据清除掉,否则那些数据都会被加载,最后重新绘制动态柱形图构建动态柱形图的步骤主要分为以下四步,还需要在项目中引入AChartEngine依赖jar包,在Manifest中添加<activityandroid:name="org.achartengine.GraphicalActivity" />

1.设置XYMultipleSeriesRenderer

private void mRendererSetting() {
        mRenderer = new XYMultipleSeriesRenderer();
        mRenderer.setAxisTitleTextSize(16);
        mRenderer.setChartTitleTextSize(20);
        mRenderer.setLabelsTextSize(15);
        mRenderer.setLegendTextSize(15);
        mSeriesRenderer = new SimpleSeriesRenderer();
        mSeriesRenderer.setColor(PieChartBuilder.getRandomColor());
        mRenderer.addSeriesRenderer(mSeriesRenderer);
        setChartSettings(mRenderer, "柱形图示例", "月份", "数量", 0.5, 12.5, 0, 2400,
                Color.GRAY, Color.LTGRAY);// 设置柱形图标题,横轴(X轴)、纵轴(Y轴)、最小的伸所刻度、最大的伸所刻度
//        mRenderer.getSeriesRendererAt(0).setDisplayChartValues(true);// 在第0条柱形图上显示数据
        mRenderer.setDisplayChartValues(true);
        mRenderer.setXLabels(12);
        mRenderer.setYLabels(10);
        mRenderer.setXLabelsAlign(Align.LEFT);// 数据从左到右显示
        mRenderer.setYLabelsAlign(Align.LEFT);
        mRenderer.setPanEnabled(true, false);
        mRenderer.setZoomEnabled(true);
        mRenderer.setZoomButtonsVisible(true);// 显示放大缩小功能按钮
        mRenderer.setZoomRate(1.1f);
        mRenderer.setBarSpacing(0.5f);// 柱形图间隔
        
    }

2.构建数据源CategorySeries

/**
     * 更新数据,柱形图颜色
     */
    private void updateChart() {
        Log.i("qiuzhping", " updateChart ok ");
        mDataset.clear();
        mCategorySeries.clear();
        mRenderer.removeSeriesRenderer(mSeriesRenderer);
        mSeriesRenderer = new SimpleSeriesRenderer();
        mSeriesRenderer.setColor(PieChartBuilder.getRandomColor());
        mRenderer.addSeriesRenderer(mSeriesRenderer);
        Random random = new Random();
        int R = random.nextInt(255);
        double[] v = new double[] { R+1423, R+1230, R+1424, R+1524, R+1590, R+1920, R+2203,
                R+2120, R+1950, R+1550, R+1260, R+1400 };
        int seriesLength = v.length;
        for (int k = 0; k < seriesLength; k++) {
            mCategorySeries.add(v[k]);
        }
        mRenderer.setDisplayChartValues(true);
        mDataset.addSeries(mCategorySeries.toXYSeries());
        mChartView.repaint();
    }

3.通过ChartFactory获取饼图

mChartView = ChartFactory.getBarChartView(context, mDataset, mRenderer,
                Type.DEFAULT);
        mRenderer.setClickEnabled(true);

        mLinear.addView(mChartView, new LayoutParams(
                LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

4.构建定时器任务

mHandler = new Handler() {// 这里的Handler实例将配合下面的Timer实例,完成定时更新图表的功能
            @Override
            public void handleMessage(Message msg) {
                if (msg.what == 1) {
                    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, 500, 1000 * 10);// 执行任务

效果图:


对应demo:安卓实现AChartEngine+动态饼图+柱形图http://download.csdn.net/detail/qiu_11/8136467

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 动态图表可以使用一些开源库,比如 MPAndroidChart、AChartEngine、HelloCharts 等。这些库都提供了简单易用的 API,可以帮助你实现各种类型的动态图表,包括折线图、柱状图、饼状图等。 其中,MPAndroidChart 库是最受欢迎的动态图表库之一,它支持丰富的图表类型和交互式功能。以下是使用 MPAndroidChart 库绘制动态折线图的步骤: 1. 添加 MPAndroidChart 库到项目中。可以在项目的 build.gradle 文件中添加以下依赖项: ``` dependencies { implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } ``` 2. 在布局文件中添加一个 LineChart 视图: ``` <com.github.mikephil.charting.charts.LineChart android:id="@+id/chart" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 3. 在代码中获取 LineChart 对象并配置其属性: ``` LineChart chart = findViewById(R.id.chart); chart.getDescription().setEnabled(false); chart.setTouchEnabled(true); chart.setDragEnabled(true); chart.setScaleEnabled(true); chart.setDrawGridBackground(false); chart.setPinchZoom(true); chart.setBackgroundColor(Color.WHITE); chart.animateX(1500); ``` 4. 创建一个 LineDataSet 对象,并向其中添加数据: ``` ArrayList<Entry> values = new ArrayList<>(); for (int i = 0; i < data.size(); i++) { values.add(new Entry(i, data.get(i))); } LineDataSet dataSet = new LineDataSet(values, "Dynamic Data"); dataSet.setDrawIcons(false); dataSet.setColor(Color.BLUE); dataSet.setLineWidth(2f); dataSet.setDrawCircles(false); dataSet.setDrawValues(false); ``` 5. 创建一个 LineData 对象,并将 LineDataSet 对象添加到其中: ``` LineData lineData = new LineData(dataSet); chart.setData(lineData); ``` 6. 在定时器中更新 LineData 对象的数值,并调用 chart.invalidate() 方法刷新图表: ``` Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { data.add(Math.random() * 100); values.add(new Entry(data.size() - 1, data.get(data.size() - 1))); dataSet.notifyDataSetChanged(); lineData.notifyDataChanged(); chart.notifyDataSetChanged(); chart.invalidate(); } }); } }, 0, 1000); ``` 以上就是使用 MPAndroidChart 库绘制动态折线图的基本步骤。如果需要实现其他类型的动态图表,可以参考库的官方文档或者使用其他开源库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值