黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

AChartEngine應用之PieChart(動態餅圖,允許產

系統 2058 0

AChartEngine應用之PieChart(動態餅圖)

接著上一次寫的內容,構建動態餅圖,并產生與用戶交互,官方的API并沒有提供可以借鑒的動態更新餅圖的方法,考慮到數據都是活動的,不可能總是用靜態數據,所以我下面的demo就是模擬動態數據用餅圖顯示,過程看起來笨拙一點,但是肯定可以使用的,具體是通過定時器+Handler實現定時任務,通過Handler更新主線程UI,在更新之前要把之前的數據清除掉,否則那些數據都會被加載,最后重新繪制餅圖,

構建動態餅圖的步驟主要分為以下四步,還需要在項目中引入AChartEngine依賴jar包,在Manifest中添加:<activityandroid:name="org.achartengine.GraphicalActivity" />

1.設置DefaultRenderer

DefaultRenderer mRenderer = new DefaultRenderer();// PieChart的主要描繪器

mRenderer = new DefaultRenderer();// 創建一個描繪器的實例,將被用來創建圖表

mRenderer.setZoomButtonsVisible(true);// 顯示放大縮小功能按鈕

mRenderer.setStartAngle(180);// 設置為水平開始

mRenderer.setDisplayValues(true);// 顯示數據

// mRenderer.setFitLegend(false);// 設置是否顯示圖例

// mRenderer.setLegendTextSize(10);// 設置圖例字體大小

// mRenderer.setLegendHeight(10);// 設置圖例高度

mRenderer.setShowLegend(false);// 默認是顯示的需要關閉,因為動態更新數據的時候,圖例更新慢

mRenderer.setChartTitle("餅圖示例");// 設置餅圖標題

mRenderer.setChartTitleTextSize(14);// 設置餅圖標題大小

2.構建數據源CategorySeries

for (int i = 0; i < data.length; i++)

VALUE += data[i];

for (int i = 0; i < data.length; i++) {

mSeries.add("示例 " + (i + 1), data[i] / VALUE);// 設置種類名稱和對應的數值,前面是(key,value)鍵值對

SimpleSeriesRenderer renderer = new SimpleSeriesRenderer();

if (i < COLORS.length) {

renderer.setColor(COLORS[i]);// 設置描繪器的顏色

} else {

renderer.setColor(getRandomColor());// 設置描繪器的顏色

}

renderer.setChartValuesFormat(NumberFormat.getPercentInstance());// 設置百分比

mRenderer.setChartTitleTextSize(14);// 設置餅圖標題大小

mRenderer.addSeriesRenderer(renderer);// 將最新的描繪器添加到DefaultRenderer中

}

3.通過ChartFactory獲取餅圖

mChartView = ChartFactory.getPieChartView(getApplicationContext(),

mSeries, mRenderer);// 構建mChartView

mRenderer.setClickEnabled(true);// 允許點擊事件

mChartView.setOnClickListener(new View.OnClickListener() {// 具體內容

}

4.構建定時器任務

handler = new Handler() {// 這里的Handler實例將配合下面的Timer實例,完成定時更新圖表的功能

@Override

public void handleMessage(Message msg) {

if (msg.what == 1) {

updateChart();// 刷新圖表具體方法 Handler將此并入主線程

}

super.handleMessage(msg);

}

};

task = new TimerTask() {

@Override

public void run() {//通過消息更新

Log.i("task", " task ok ");

Message message = new Message();

message.what = 1;//消息定義標志

handler.sendMessage(message);

}

};

timer.schedule(task, 500, 1000 * 10);//執行任務

效果圖:

AChartEngine應用之PieChart(動態餅圖,允許產生動態數據并顯示)

AChartEngine應用之PieChart(動態餅圖,允許產生動態數據并顯示)

code:

    package com.qiuzhping.achart;

import java.text.NumberFormat;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.model.CategorySeries;
import org.achartengine.renderer.DefaultRenderer;
import org.achartengine.renderer.SimpleSeriesRenderer;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;

/**
 * @項目名稱:AChart
 * @類名稱:PieChartBuilder
 * @作者:Qiuzhping
 * @時間:2014-1-15下午11:20:48
 * @作用 :構建餅圖,并產生與用戶交互,官方的API并沒有提供可以借鑒的動態更新餅圖的方法,
 *     考慮到數據都是活動的,不可能總是用靜態數據,所以我下面的demo就是模擬動態數據用餅圖顯示,過程看起來笨拙一點,但是肯定可以使用的,
 *     具體是通過定時器+Handler實現定時任務,通過Handler更新主線程UI,在更新之前要把之前的數據清除掉,否則那些數據都會被加載,最后
 *     重新繪制餅圖
 */
public class PieChartBuilder extends Activity {

	private Timer timer = new Timer();// 設計定時器
	private TimerTask task;// 定時任務
	private Handler handler;// 線程通訊
	private String title = "動態餅圖示例";// 餅圖標題
	private CategorySeries mSeries;// 餅圖數據
	private DefaultRenderer mRenderer;// 餅圖描繪器
	private GraphicalView mChartView;// 顯示PieChart
	private Context context;
	private double data[] = new double[9];
	private LinearLayout mLinear;// 布局方式
	private int[] COLORS = new int[] { Color.RED, Color.GREEN, Color.BLUE,
			Color.MAGENTA, Color.CYAN, Color.YELLOW, Color.DKGRAY };// 顏色
	private double VALUE = 0;// 總數
	private SimpleSeriesRenderer renderer;// 餅圖每塊描繪器

	public void back(View v) {
		Log.i("qiuzhping", "back onClick");
		Intent intent = new Intent();
		intent.setClass(PieChartBuilder.this, MainActivity.class);
		startActivity(intent);
		PieChartBuilder.this.finish();
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		context = getApplicationContext();// 獲取上下文對象
		setContentView(R.layout.xy_chart);// 設置樣式

		mLinear = (LinearLayout) findViewById(R.id.chart);// 獲取mLinear布局,下面會把圖表畫在這個布局里面
		mLinear.setBackgroundColor(Color.BLACK);// 設置背景色

		mRenderer = new DefaultRenderer();// 創建一個描繪器的實例,將被用來創建圖表
		mRenderer.setZoomButtonsVisible(true);// 顯示放大縮小功能按鈕
		mRenderer.setStartAngle(180);// 設置為水平開始
		mRenderer.setDisplayValues(true);// 顯示數據
		// mRenderer.setFitLegend(false);// 設置是否顯示圖例
		// mRenderer.setLegendTextSize(10);// 設置圖例字體大小
		// mRenderer.setLegendHeight(10);// 設置圖例高度
		mRenderer.setShowLegend(false);// 默認是顯示的下載需要關閉,因為動態更新數據的時候,圖例更新慢
		mRenderer.setChartTitle(title);// 設置餅圖標題
		mRenderer.setChartTitleTextSize(14);// 設置餅圖標題大小

		mSeries = new CategorySeries("");

		for (int i = 0; i < 9; i++) {
			Random random = new Random();
			int R = random.nextInt(255);
			Log.i("qiuzhping", "Random R=" + R);
			data[i] = R;
			VALUE += data[i];// 總的數據大小
		}
		for (int i = 0; i < data.length; i++) {
			mSeries.add("示例 " + (i + 1), data[i] / VALUE);// 設置種類名稱和對應的數值,前面是(key,value)鍵值對
			renderer = new SimpleSeriesRenderer();
			if (i < COLORS.length) {
				renderer.setColor(COLORS[i]);// 設置描繪器的顏色
			} else {
				renderer.setColor(getRandomColor());// 設置描繪器的顏色
			}
			renderer.setChartValuesFormat(NumberFormat.getPercentInstance());// 設置百分比
			mRenderer.addSeriesRenderer(renderer);// 將最新的描繪器添加到DefaultRenderer中
		}

		mChartView = ChartFactory.getPieChartView(context, mSeries, mRenderer);// 構建mChartView

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

		handler = new Handler() {// 這里的Handler實例將配合下面的Timer實例,完成定時更新圖表的功能
			@Override
			public void handleMessage(Message msg) {
				if (msg.what == 1) {
					updateChart();// 刷新圖表具體方法 Handler將此并入主線程
				}
				super.handleMessage(msg);
			}
		};
		task = new TimerTask() {
			@Override
			public void run() {// 通過消息更新
				Log.i("task", " task ok ");
				Message message = new Message();
				message.what = 1;// 消息定義標志
				handler.sendMessage(message);
			}
		};

		timer.schedule(task, 500, 1000 * 10);// 執行任務
	}

	@Override
	public void onDestroy() {// 當結束程序時關掉Timer
		if (timer != null) {
			timer.cancel();
			Log.i("qiuzhping", "onDestroy timer cancel ");
		}
		super.onDestroy();
	}

	private void updateChart() {
		Log.i("qiuzhping", "updateChart ok");
		mSeries.clear();
		VALUE = 0;// 初始化
		// mRenderer.removeAllRenderers();
		for (int i = 0; i < 9; i++) {// 產生動態數據,實際項目中可以通過Web Service
										// 獲取數據,不過這個內容應該放在線程上搞,太耗時了
			Random random = new Random();
			int R = random.nextInt(255);
			Log.i("qiuzhping", "Random R=" + R);
			data[i] = R;
			VALUE += data[i];// 總的數據大小
		}
		for (int i = 0; i < data.length; i++) {
			mSeries.add("示例 " + (i + 1), data[i] / VALUE);// 設置種類名稱和對應的數值,前面是(key,value)鍵值對
			renderer = new SimpleSeriesRenderer();
			if (i < COLORS.length) {
				renderer.setColor(COLORS[i]);// 設置描繪器的顏色
			} else {
				renderer.setColor(getRandomColor());// 設置描繪器的顏色
			}
			renderer.setChartValuesFormat(NumberFormat.getPercentInstance());// 設置百分比

			mRenderer.addSeriesRenderer(renderer);// 將最新的描繪器添加到DefaultRenderer中
		}
		mChartView.repaint();
	}

	private int getRandomColor() {// 分別產生RBG數值
		Random random = new Random();
		int R = random.nextInt(255);
		int G = random.nextInt(255);
		int B = random.nextInt(255);
		return Color.rgb(R, G, B);
	}
}

  

如果有哪位朋友想到更合適的方法,可以一起研究研究。。。。

完整項目:http://download.csdn.net/detail/qiu_11/ 18370487

未完待續。。。。

AChartEngine應用系列文章

(一)AChartEngine簡介

(二)AChartEngine應用之PieChart(餅圖)

(三) AChartEngine應用之BarChart(柱形圖)

(四) AChartEngine應用之PieChart(動態餅圖,允許產生動態數據并顯示)

(五) AChartEngine應用之LineChart(模擬生命特征值圖)

(六) AChartEngine應用之LineChart(模擬三角函數sin,cos)

(七) AChartEngine高級應用 CombinedXYChart (組合統計圖)









AChartEngine應用之PieChart(動態餅圖,允許產生動態數據并顯示)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論