2016-09-22 3 views
0

Я пытаюсь преобразовать вид LineChart MPAndroidChart в объект Bitmap, когда пользователь нажимает кнопку, чтобы сохранить диаграмму в качестве изображения. Однако я получаю исключение ArrayIndexOutOfBoundsException. Я использую MPAndroidChart v. 3.0.0-бета. Код следующим образом:Преобразование представления MPAndroidChart в Bitmap дает ArrayIndexOutOfBoundsException

public static Bitmap getBitmapFromView(View graph) { 
    Bitmap returnedBitmap = Bitmap.createBitmap(graph.getWidth(), graph.getHeight(), Bitmap.Config.ARGB_8888); 

    Canvas canvas = new Canvas(returnedBitmap); 
    Drawable bgDrawable = graph.getBackground(); 

    if (bgDrawable != null) 
     bgDrawable.draw(canvas); 
    else 
     canvas.drawColor(Color.WHITE); 

    view.draw(canvas); 

    return returnedBitmap; 
} 

Исключением является следующее и линии 1409 из ConstantsAndUtils.java является view.draw (холст) выше.

java.lang.ArrayIndexOutOfBoundsException: length = 1; Индекс = 1 в com.github.mikephil.charting.renderer.LineChartRenderer.drawCircles (LineChartRenderer.java:689) в com.github.mikephil.charting.renderer.LineChartRenderer.drawExtras (LineChartRenderer.java:595) на ком .github.mikephil.charting.charts.BarLineChartBase.onDraw (BarLineChartBase.java:252) на android.view.View.draw (View.java:14788) на com.dnaphone.edu.utils.ConstantsAndUtils.getBitmapFromView (ConstantsAndUtils .java: 1409) в com.dnaphone.edu.fragments.HistoryExperimentResultFragment $ 24.doInBackground (HistoryExperimentResultFragment.java:1886) в com.dnaphone.edu.fragments.HistoryExperimentResultFragment $ 24.doInBackground (HistoryExperimentResultFragment.java:1655) на андроид .os.AsyncTask $ 2.call (AsyncTask.java:288) на java.util.concurrent.FutureTask.run (FutureTask.java:237) на android.os.AsyncTask $ SerialExecutor $ 1.run (AsyncTask.java:231) на java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor .java: 1112) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:587) в java.lang.Thread.run (Thread.java:841)

Edit: проблема была решена в финальной версии 3.0.0.

ответ

0

если вы хотите сохранить график в виде изображения, то вы должны использовать

mChart.saveToGallery("test.png", 50);

в этом test.png ваше имя изображения и 50 качество вашего изображения и сохраняются в памяти устройства это изображение.

+0

Я пробовал, но у меня такое же исключение. – aleGrazioli

+0

Я думаю, что нет ничего такого, что генерирует ArrayIndexOutOfBoundsException. –

+0

Я проверил библиотечный код на GitHub и есть ошибка в функции, которая обновляет счетчик до размера массива, а затем использует его для доступа к такому массиву. Конечно, если счетчик имеет значение n, последний элемент массива имеет индекс n-1. Это генерирует исключение. Я жду, когда автор библиотеки исправит проблему. – aleGrazioli