AChartEngine中气泡图

package com.sprd.chartexample;

import java.util.Random;

import org.achartengine.ChartFactory;
import org.achartengine.chart.BarChart.Type;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.model.XYValueSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.Paint.Align;
import android.os.Bundle;

public class MainActivity extends Activity {
	public static final String TYPE = "type";

	private XYMultipleSeriesDataset mDataset = new XYMultipleSeriesDataset();

	private XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 饼图
		// Intent pie = new APieChartExample().execute(this);
		// startActivity(pie);

		// 折线图
		// Intent line = new ALineChartExample().execute(this);
		// startActivity(line);

		// 柱状图
		// Intent bar = new ABarChartExample().execute(this);
		// startActivity(bar);
		// 构建数据
		// 设置图表显示的位置
		mRenderer.setMargins(new int[] { 30, 30, 30, 30 });
		// 设置图表的X轴处于水平方向还是垂直方向
		mRenderer
				.setOrientation(XYMultipleSeriesRenderer.Orientation.HORIZONTAL);

		mRenderer.setXTitle("时间");// 设置为X轴的标题
		mRenderer.setYTitle("百分比");// 设置Y轴的标题
		mRenderer.setAxisTitleTextSize(20);// 设置轴标题文本大小
		mRenderer.setChartTitle("Cpu Load");// 设置图表标题
		mRenderer.setChartTitleTextSize(30);// 设置图表标题文字的大小
		mRenderer.setLabelsTextSize(22);// 设置标签的文字大小 ,刻度文本的大小
		// mRenderer.setLegendTextSize(20);//设置图例文本大小
		mRenderer.setPointSize(1f);// 设置点的大小
		mRenderer.setYAxisMin(0);// 设置y轴最小值是0
		mRenderer.setYAxisMax(50); // 设置Y轴最大值为100
		mRenderer.setYLabels(5);// 设置Y轴刻度个数(貌似不太准确)
		mRenderer.setYLabelsAlign(Align.RIGHT);// y轴字体对齐方式
		mRenderer.setYLabelsPadding(5);// y轴的间距
		mRenderer.setYLabelsVerticalPadding(-5); // y轴标签垂直间距
		mRenderer.setYLabelsAngle(-45);// 标签倾斜的角度
		mRenderer.setXLabelsPadding(5); // x轴标签间距
		mRenderer.setXAxisMax(10); // x轴最大值
		mRenderer.setXLabelsAngle(-45);// x标签倾斜的角度
		mRenderer.setXLabelsAlign(Align.CENTER);
		mRenderer.setShowGrid(true);// 显示网格
		mRenderer.setPanEnabled(false, false);// 设置拖动属性,第一个参数为左右是否可拖动,第二个参数为上下是否可拖动
		mRenderer.setApplyBackgroundColor(true);// 允许设置背景颜色
		mRenderer.setBackgroundColor(Color.BLACK);// 设置为黑色
		// mRenderer.setClickEnabled(true);//设置了之后,不可再拖动
		// mRenderer.setZoomButtonsVisible(true);//设置伸缩按钮是否可见
		// mRenderer.setZoomEnabled(true);
		// mRenderer.setExternalZoomEnabled(true);//设置是否可以向伸缩
		// mRenderer.setXLabels(0);
		Random r = new Random();
		int[] colors = { Color.BLUE, Color.RED, Color.GREEN, Color.YELLOW,
				Color.LTGRAY };
		for (int i = 0; i < 5; i++) {
			// 线的条数,也就是对象的意思,显示在图表下,用于提示信息,比如Cpu有5个
//			XYSeries series = new XYSeries("cpu" + i);
			XYValueSeries series = new XYValueSeries("cpu" + i);
			for (int k = 0; k < 10; k++) {
				series.add(k, r.nextInt(50));
			}
			mDataset.addSeries(series);
			// 点的绘制进行设置
			XYSeriesRenderer xyRenderer = new XYSeriesRenderer();
			// 设置颜色
			xyRenderer.setColor(colors[i]);
			// 设置点的样式
			xyRenderer.setPointStyle(PointStyle.SQUARE);
			// 线条宽度
			xyRenderer.setLineWidth(3);
			// 是否显示值
			xyRenderer.setDisplayChartValues(true);
			// 如果显示值,字体大小
			xyRenderer.setChartValuesTextSize(10);
			// 点的形状,是空心的还是实心的
			xyRenderer.setFillPoints(false);
			// 刻度之间的距离
			xyRenderer.setDisplayChartValuesDistance(5);
			// 点与数值的距离
			xyRenderer.setChartValuesSpacing(10);
			//
			xyRenderer.setDisplayBoundingPoints(false);
			// 点的面积
			xyRenderer.setPointStrokeWidth(1);
			// 是否显示图例
			xyRenderer.setShowLegendItem(true);
			mRenderer.addSeriesRenderer(xyRenderer);
		}
		// 线性图
		// Intent intent = ChartFactory.getLineChartIntent(this, mDataset,
		// mDataset);
		// 柱状图
//		Intent intent = ChartFactory.getBarChartIntent(this, mDataset,
//				mRenderer, Type.DEFAULT);
		// 带标题的柱状图
//		 Intent intent = ChartFactory.getBarChartIntent(this, mDataset,
//		 mRenderer, Type.DEFAULT, "cpu效率");
		 Intent intent = ChartFactory.getBubbleChartIntent(this, mDataset,
		 mRenderer);
		startActivity(intent);

	}
}

图:




很显然这还不是气泡图,只是分列图。


想要气泡,肯定有一个参数来设置气泡的半径,加上第三个参数.


series.add(k + 1f, r.nextInt(50),i);

然后我们就能看到气泡了:




学习过程中遇到的错误归纳

错误1.


08-11 10:19:29.720: E/AndroidRuntime(18551): FATAL EXCEPTION: main
08-11 10:19:29.720: E/AndroidRuntime(18551): Process: com.sprd.chartexample, PID: 18551
08-11 10:19:29.720: E/AndroidRuntime(18551): java.lang.ClassCastException: org.achartengine.model.XYSeries cannot be cast to org.achartengine.model.XYValueSeries
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at org.achartengine.chart.BubbleChart.drawSeries(BubbleChart.java:75)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at org.achartengine.chart.XYChart.drawSeries(XYChart.java:518)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at org.achartengine.chart.XYChart.draw(XYChart.java:311)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at org.achartengine.GraphicalView.onDraw(GraphicalView.java:168)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.View.draw(View.java:14480)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.View.getDisplayList(View.java:13370)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.View.getDisplayList(View.java:13412)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.View.draw(View.java:14197)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.View.getDisplayList(View.java:13365)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.View.getDisplayList(View.java:13412)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.View.draw(View.java:14197)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.View.draw(View.java:14483)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at com.android.internal.widget.ActionBarOverlayLayout.draw(ActionBarOverlayLayout.java:388)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.View.getDisplayList(View.java:13370)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.View.getDisplayList(View.java:13412)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.View.draw(View.java:14197)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.View.draw(View.java:14483)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.widget.FrameLayout.draw(FrameLayout.java:472)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2366)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.View.getDisplayList(View.java:13370)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.View.getDisplayList(View.java:13412)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.HardwareRenderer$GlRenderer.buildDisplayList(HardwareRenderer.java:1570)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1449)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.ViewRootImpl.draw(ViewRootImpl.java:2396)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2268)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1892)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5739)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.Choreographer.doCallbacks(Choreographer.java:574)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.Choreographer.doFrame(Choreographer.java:544)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.os.Handler.handleCallback(Handler.java:733)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.os.Handler.dispatchMessage(Handler.java:95)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.os.Looper.loop(Looper.java:136)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at android.app.ActivityThread.main(ActivityThread.java:5372)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at java.lang.reflect.Method.invokeNative(Native Method)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at java.lang.reflect.Method.invoke(Method.java:515)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:970)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:786)
08-11 10:19:29.720: E/AndroidRuntime(18551): 	at dalvik.system.NativeStart.main(Native Method)

因为代码:


<pre name="code" class="java">XYSeries series = new XYSeries("cpu" + i);

 

此时应该将XYSeries改成XYValueSeries类。


错误2.


09-10 23:23:31.360: E/AndroidRuntime(1369): FATAL EXCEPTION: main
09-10 23:23:31.360: E/AndroidRuntime(1369): Process: com.sprd.chartexample, PID: 1369
09-10 23:23:31.360: E/AndroidRuntime(1369): java.lang.ArrayIndexOutOfBoundsException: length=0; index=-1
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at java.util.ArrayList.get(ArrayList.java:310)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at org.achartengine.model.XYValueSeries.getValue(XYValueSeries.java:118)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at org.achartengine.chart.BubbleChart.drawSeries(BubbleChart.java:79)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at org.achartengine.chart.XYChart.drawSeries(XYChart.java:518)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at org.achartengine.chart.XYChart.draw(XYChart.java:311)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at org.achartengine.GraphicalView.onDraw(GraphicalView.java:168)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.view.View.draw(View.java:14433)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.view.View.draw(View.java:14318)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.view.View.draw(View.java:14316)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.view.View.draw(View.java:14436)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at com.android.internal.widget.ActionBarOverlayLayout.draw(ActionBarOverlayLayout.java:381)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.view.View.draw(View.java:14318)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.view.View.draw(View.java:14436)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.widget.FrameLayout.draw(FrameLayout.java:472)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2324)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.view.ViewRootImpl.drawSoftware(ViewRootImpl.java:2494)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.view.ViewRootImpl.draw(ViewRootImpl.java:2407)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2251)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1881)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5582)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.view.Choreographer.doCallbacks(Choreographer.java:562)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.view.Choreographer.doFrame(Choreographer.java:532)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.os.Handler.handleCallback(Handler.java:733)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.os.Handler.dispatchMessage(Handler.java:95)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.os.Looper.loop(Looper.java:137)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at android.app.ActivityThread.main(ActivityThread.java:4998)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at java.lang.reflect.Method.invokeNative(Native Method)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at java.lang.reflect.Method.invoke(Method.java:515)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
09-10 23:23:31.360: E/AndroidRuntime(1369): 	at dalvik.system.NativeStart.main(Native Method)

这是由于代码


series.add(k , r.nextInt(50),i);

第一个参数没有将int转变为float型的,默认调用add(int index,double x, double y),而我们想要调用的是add(double x,double y,double value)。

所以将代码变为


series.add(k + 1f, r.nextInt(50),i);

即可



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值