Страницы

Поиск по вопросам

вторник, 25 февраля 2020 г.

Заполнение массива динамическими данными

#java #list


Использую библиотеку AndroidPlot и требуется сделать график по результатам вычислений.
Результаты записываются в List<>, но как их перенести на график?

Ругается: "expression exepted" в строчке:

Number[] series1Numbers = new Number[]{List resul};

    


Ответы

Ответ 1



Вообще у интерфейса Collection, к которому относится List, есть нативный метод приведения к массиву: Iteration[] iterationArray = iterationList.toArray(new Iteration[iterationList.size()]); Он, однако, здесь просто так не сработает - вам нужно по пути как-то преобразовать Iteration в Number, которые, насколько понимаю, друг от друга никак не наследуются. Я не уверен, может ли в этом методе производиться upcast (скорее всего, может), однако вероятнее всего вам необходимо просто в цикле перебрать список и заполнить массив.

Ответ 2



прописываем компонент для рисования графиков: Настраиваем графики в коде: 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" Запускаем проект и смотрим на результат. Удали этот код - 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"); И немного измени форматтер

Комментариев нет:

Отправить комментарий