Сайт разработчика Александр Климова

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Библиотека Androidplot

Ещё одна библиотека с открытыми исходниками для рисования графиков Androidplot.

На сайте подробно описан процесс установки библиотеки и даны несколько примеров. Также можно скачать демо-версию с готовыми примерами на свой телефон и посмотреть вживую.

Я приведу только базовый пример с сайта разработчиков.

Скачиваем последнюю версию библиотеки и копируем её в папку libs. Далее в разметке прописываем компонент для рисования графиков:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <com.androidplot.xy.XYPlot
        android:id="@+id/mySimpleXYPlot"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginLeft="10px"
        android:layout_marginRight="10px"
        android:layout_marginTop="10px"
        title="A Simple XYPlot Example" />

</LinearLayout>

Настраиваем графики в коде:


package ru.alexanderklimov.test;

import java.util.Arrays;

import com.androidplot.series.XYSeries;
import com.androidplot.xy.LineAndPointFormatter;
import com.androidplot.xy.SimpleXYSeries;
import com.androidplot.xy.XYPlot;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;

public class TestActivity extends Activity {

	private XYPlot mySimpleXYPlot;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.activity_test);

		// initialize our XYPlot reference:
		mySimpleXYPlot = (XYPlot) findViewById(R.id.mySimpleXYPlot);

		// Create a couple arrays of y-values to plot:
		Number[] series1Numbers = { 1, 8, 5, 2, 7, 4 };
		Number[] series2Numbers = { 4, 6, 3, 8, 2, 10 };

		// Turn the above arrays into XYSeries':
		// SimpleXYSeries takes a List so turn our array into a List
		XYSeries series1 = new SimpleXYSeries(Arrays.asList(series1Numbers),
				SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, // Y_VALS_ONLY means use
														// the element index as
														// the x value
				"Series1"); // Set the display title of the series

		// same as above
		XYSeries series2 = new SimpleXYSeries(Arrays.asList(series2Numbers),
				SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, "Series2");

		// Create a formatter to use for drawing a series using
		// LineAndPointRenderer:
		LineAndPointFormatter series1Format = new LineAndPointFormatter(
				Color.rgb(0, 200, 0), // line color
				Color.rgb(0, 100, 0), // point color
				null); // fill color (none)

		// add a new series' to the xyplot:
		mySimpleXYPlot.addSeries(series1, series1Format);

		// same as above:
		mySimpleXYPlot.addSeries(
				series2,
				new LineAndPointFormatter(Color.rgb(0, 0, 200), Color.rgb(0, 0,
						100), null));

		// reduce the number of range labels
		mySimpleXYPlot.setTicksPerRangeLabel(3);

		// by default, AndroidPlot displays developer guides to aid in laying
		// out your plot.
		// To get rid of them call disableAllMarkup():
		mySimpleXYPlot.disableAllMarkup();
	}

}

Любопытно, что в двух местах код был подчёркнут, указывая на устаревшие конструкции. Видимо, разработчики не успели обновить примеры на сайте в соответствии с новой документацией.

Последний штрих - в манифесте у тега application нужно прописать один атрибут:


android:hardwareAccelerated="false"

Запускаем проект и смотрим на результат:

AndroidPlot

Также возможны динамические графики, зум и прочие плюшки.

Реклама