【问题标题】:Exporting Charts as images in Android在 Android 中将图表导出为图像
【发布时间】:2025-12-18 23:15:02
【问题描述】:

我被困在这个问题上将近一个月了。我在我的 android 代码中有一个使用“afreechart”的完美图表,但是,该库似乎还不支持将图表导出为图像(因为它基于“jfreechart”并且这个可以完成工作)。

我尝试获取图表视图,将其转换为画布并使用位图库的压缩功能进行保存,但是每次我尝试这样做时,我都会得到一个全黑的图像。我尝试了同样的方法,它适用于我的代码的其他视图(简单视图,如线性布局和相对布局)。

之后我尝试创建一个例程来制作图表活动的屏幕截图并在此之后关闭该活动。但是我无法通过代码找到一种方法,我得到的最接近的是monkeyrunner。

所以我放弃了这个想法并尝试寻找其他库,例如'kichart','achartengine'等,但它们似乎都没有完成这项工作,我吓坏了,我认为将图表导出到图像不会那么难......有什么想法吗?

当我为布局设置背景颜色时,返回的图像是一个带有背景颜色的完整矩形,所以它得到的是布局,而不是图表。

我的代码:

package com.kichart;

import java.io.File;
import java.io.FileOutputStream;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.LinearLayout;

public class Main extends Activity {

    LinearLayout ll;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        float[] values = new float[] { 2.0f,1.5f, 2.5f, 1.0f , 3.0f };
        String[] verlabels = new String[] { "great", "ok", "bad" };
        String[] horlabels = new String[] { "today", "tomorrow", "next week", "next month" };
        GraphView graphView = new GraphView(this, values, "GraphViewDemo",horlabels, verlabels, GraphView.BAR);

        ll = new LinearLayout(this);
        ll.addView(graphView);

        Draw2d d = new Draw2d(this);
        setContentView(d);

        //setContentView(graphView);
    }


    public class Draw2d extends View {

        public Draw2d(Context context) {
            super(context);
            setDrawingCacheEnabled(true);
        }

        @Override
        protected void onDraw(Canvas c) {
            ll.setBackgroundColor(Color.WHITE);
            ll.measure(MeasureSpec.getSize(ll.getWidth()), MeasureSpec.getSize(ll.getHeight()));
            ll.layout(400, 400, 400, 400);
            ll.draw(c);

            try {
                getDrawingCache().compress(Bitmap.CompressFormat.PNG, 100, new FileOutputStream(new File("/mnt/sdcard/graph2.png")));
            } catch (Exception e) {
                Log.e("Error--------->", e.toString());
            }
            super.onDraw(c);
        }

    }

}

【问题讨论】:

    标签: android image charts export save


    【解决方案1】:

    您可以通过以下方式从视图中获取图像位图:

      Bitmap bitmap;
        chart.setDrawingCacheEnabled(true);
        bitmap = Bitmap.createBitmap(chart.getDrawingCache());
        chart.setDrawingCacheEnabled(false);
    

    如果您无法在图表上调用 getDrawingCache,请尝试将其放置在诸如 RelativeLayout 之类的布局中。并在布局上调用它。

    之后你可以将它保存为图像..

    如果图像仍然是黑色的,您需要确保在获取位图之前创建图表。

    希望对你有帮助

    【讨论】:

    • 仍然不起作用...我尝试设置背景颜色以查看问题是否与图表捕获有关,或者问题是否与角色布局有关,并且我得到了一个图像操作系统背景的颜色。我会把我的代码放在这个主题上。
    • 我认为问题是(就像我很难过):您尝试在创建位图之前获取它。当我遇到同样的问题时,我注意到我只能在onCreate 完成。所以你可以尝试用graphview和一个按钮制作一个视图,并将我在我的答案中发布的代码放在按钮的onClick中(只是为了确保graphview被创建)
    • 男人!说真的,我不知道如何感谢你!我被困了一个月,非常感谢!很抱歉回答晚了,这个周末我没有带我的笔记......谢谢你,工作得很好! =)
    最近更新 更多