【问题标题】:Converting a MPAndroidChart view to a Bitmap gives ArrayIndexOutOfBoundsException将 MPAndroidChart 视图转换为位图会产生 ArrayIndexOutOfBoundsException
【发布时间】:2017-08-08 16:50:04
【问题描述】:

当用户点击按钮时,我正在尝试将MPAndroidChart LineChart 视图转换为位图对象,以将图表保存为图像。但是,我得到一个 ArrayIndexOutOfBoundsException。我正在使用 MPAndroidChart v. 3.0.0-beta。代码如下:

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;
}

以下是例外,ConstantsAndUtils.java的第1409行是上面的view.draw(canvas)

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) 在 com.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) 在 android.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)

编辑:该问题已在最终 3.0.0 版本中得到解决。

【问题讨论】:

    标签: android bitmap mpandroidchart


    【解决方案1】:

    如果要将图表保存为图像,则应使用

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

    在此test.png 中是您的图像名称和50 图像质量,此图像保存在您的设备存储中。

    【讨论】:

    • 我认为这不会产生 ArrayIndexOutOfBoundsException。
    • 我已经检查了 GitHub 上的库代码,并且在将计数器更新为数组大小的函数中存在错误,然后使用它来访问这样的数组。当然,如果计数器的值为 n,则最后一个数组元素的索引为 n-1。这会产生异常。我正在等待lib的作者解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 2011-11-04
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    相关资源
    最近更新 更多