Как нарисовать график в Android, например, приложение Wifi Analyzer?

Привет, Я пытаюсь разработать приложение для тестирования полей, и я должен получать информацию, такую ​​как уровень сигнала соседних ячеек.

Итак, мой вопрос:

Как отобразить график с разными соседними ячейками Ось X и уровень сигнала на оси Y в реальном времени? Пример здесь.

У меня уже есть 5 или 6 соседних ячеек, и для каждой из них его сила сигнала.

Ответ 1

Скорее вычеркните диаграмму самостоятельно с помощью Canvas, вы можете использовать библиотеки Engine Engine, и это будет намного проще сделать.

Как AchartEngine, ChartDroid, aFreeChart, MPAndroidChart

Для 3D-диаграммы Charts4J

Как отобразить график с разными соседними ячейками Ось X и уровень сигнала на оси Y в реальном времени?

Я использовал aChart Engine для того же самого в одном из моих приложений. В библиотеке есть полная демо-версия API, поэтому будет легко понять, как ее использовать.

Ответ 2

Я не знаю, какой тип графика вы хотите разработать, потому что в вашей ссылке есть разные типы. Но я разработал график реального времени в андроиде. Я использую холст для рисования линий.

public class GraphView extends View
{
    ...
    private final Rect rect = new Rect();
    private final Paint linePaint = new Paint();
    private final Paint backgroundPaint = new Paint();
    private float[] points;

    public GraphView(final Context context, final AttributeSet aSet)
    {
        super(context, aSet);
    }
    @Override
    protected void onDraw(final Canvas canvas)
    {
        if (points == null)
        {
            return;
        }
        canvas.drawLines(points, linePaint);
        rect.set((int) (xIndex * xScale), 0, (int) (xIndex * xScale + 5), getHeight());
        canvas.drawRect(rect, backgroundPaint);
    }
...
}

Вы можете легко позиционировать/размер вашего прямоугольника в соответствии с вашими потребностями. Я не писал вычисления xIndex и xScale. Массив точек - это тот, который будет записан ваши значения.

Но будьте осторожны, в строках андроида нарисованы с парами, как я знаю, нет "точечной" структуры.

Я имею в виду, что [1, 0.25, 2, 0.45] рисует линию между x1 = 1, y1 = 0.25 и x2 = 2, y2 = 0.45

Также вы можете вызвать draw by postInvalidate()

postInvalidate() onDraw (холст холста)

Ответ 3

Я предлагаю вам использовать AChartEngine, а не рисовать на холсте. Вы можете скачать библиотеку, javadocs и демонстрационное приложение здесь.

На сайте youtube есть обучающие материалы по началу работы с AChartEngine.

Вы можете использовать линейные диаграммы с областью ниже диаграммы, заполненной цветом или не заполненной для копирования функций в первых снимках экрана, которые вы предоставили.