使用achartengine实现自定义折线图 ----附代码 调试OK

achartengine作为android开发中最常用的实现图标的开源框架,使用比较方便,参考官方文档谢了如下Demo,实现了自定义折线图。


package edu.ustb.chart;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.SeriesSelection;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.Toast;

public class MainActivity extends Activity {

	private GraphicalView mChartView;
	private XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();
	private XYMultipleSeriesDataset mDataset = new XYMultipleSeriesDataset();

	double[] xdata = new double[] { 11, 22, 33, 44, 55, 66, 77, 88, 99, 110 };
	double[] ydata = new double[] { 11, 11, 22, 33, 44, 55, 66, 77, 88, 99 };

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

	}

	/**
	 * 得到住渲染器,并对其各项属性进行设置
	 * 
	 * @return
	 */
	public XYMultipleSeriesRenderer getRenderer() {
		/** 设置主渲染器的各种属性 */
		// 设置背景色是否启用
		mRenderer.setApplyBackgroundColor(true);
		// 设置背景色
		mRenderer.setBackgroundColor(Color.argb(100, 20, 30, 40));
		// 设置x y轴标题字体大小
		mRenderer.setAxisTitleTextSize(16);
		// 设置表格标题字体大小
		mRenderer.setChartTitleTextSize(20);
		// 设置标签字体大小
		mRenderer.setLabelsTextSize(15);
		// 设置图例字体大小
		mRenderer.setLegendTextSize(15);
		mRenderer.setMargins(new int[] { 20, 20, 20, 20 });
		// 设置是否显示放大缩小按钮
		mRenderer.setZoomButtonsVisible(true);
		// 设置图表上显示点的大小
		mRenderer.setPointSize(5);
		
		// create a new renderer for the new series
		XYSeriesRenderer renderer = new XYSeriesRenderer();
		// set some renderer properties
		renderer.setPointStyle(PointStyle.CIRCLE);
		renderer.setFillPoints(true);
		renderer.setDisplayChartValues(true);
		renderer.setDisplayChartValuesDistance(100);
		renderer.setColor(Color.RED);
		setSeriesWidgetsEnabled(true);
		mRenderer.addSeriesRenderer(renderer);
		return mRenderer;
	}

	/**
	 * 得到住渲染器,并对其各项属性进行设置
	 * 
	 * @return
	 */
	public XYMultipleSeriesDataset getDataset() {
		String seriesTitle = "健康数据";
		XYSeries mSeries = new XYSeries(seriesTitle);
		for (int i = 0; i < 10; i++) {
			double x = xdata[i];
			double y = ydata[i];
			// 把坐标添加到当前序列中去
			mSeries.add(x, y);
		}
		mDataset.addSeries(mSeries);
		return mDataset;
	}

	@Override
	protected void onResume() {
		super.onResume();
		if (mChartView == null) {
			LinearLayout layout = (LinearLayout) findViewById(R.id.chart);
			mChartView = ChartFactory.getLineChartView(this, getDataset(), getRenderer());
			// enable the chart click events
			mRenderer.setClickEnabled(true);
			mRenderer.setSelectableBuffer(10);
			mChartView.setOnClickListener(new View.OnClickListener() {
				public void onClick(View v) {
					// handle the click event on the chart
					SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();
					if (seriesSelection == null) {
						Toast.makeText(MainActivity.this, "No chart element", Toast.LENGTH_SHORT).show();
					} else {
						// display information of the clicked point
						Toast.makeText(MainActivity.this, "Chart element in series index " + seriesSelection.getSeriesIndex() + " data point index " + seriesSelection.getPointIndex() + " was clicked" + " closest point value X=" + seriesSelection.getXValue() + ", Y=" + seriesSelection.getValue(), Toast.LENGTH_SHORT).show();
					}
				}
			});
			layout.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
			boolean enabled = mDataset.getSeriesCount() > 0;
			setSeriesWidgetsEnabled(enabled);
		} else {
			mChartView.repaint();
		}

	}

	/**
	 * Enable or disable the add data to series widgets
	 * 
	 * @param enabled
	 *            the enabled state
	 */
	private void setSeriesWidgetsEnabled(boolean enabled) {
		// mX.setEnabled(enabled);
		// mY.setEnabled(enabled);
		// mAdd.setEnabled(enabled);
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值