Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中将图表导出为图像_Android_Image_Charts_Export_Save - Fatal编程技术网

在Android中将图表导出为图像

在Android中将图表导出为图像,android,image,charts,export,save,Android,Image,Charts,Export,Save,我在这里面呆了差不多一个月了。我的android代码中有一个完美的图表,使用“afreechart”,但是,该库似乎还不支持将图表导出为图像(因为它基于“jfreechart”,而这一个就完成了这项工作) 我尝试获取图表的视图,将其转换为画布,并使用位图库的压缩功能进行保存,但是每次尝试都会得到一个完全黑色的图像。我尝试了同样的方法,它适用于代码的其他视图(简单视图,如linearlayout和relativelayout) 之后,我尝试创建一个例程来制作图表活动的屏幕截图,然后关闭该活动。但我

我在这里面呆了差不多一个月了。我的android代码中有一个完美的图表,使用“afreechart”,但是,该库似乎还不支持将图表导出为图像(因为它基于“jfreechart”,而这一个就完成了这项工作)

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

之后,我尝试创建一个例程来制作图表活动的屏幕截图,然后关闭该活动。但我找不到一种通过代码实现的方法,我得到的最接近的方法是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);
        }

    }

}

通过执行以下操作,可以从视图中获取图像位图:

  Bitmap bitmap;
    chart.setDrawingCacheEnabled(true);
    bitmap = Bitmap.createBitmap(chart.getDrawingCache());
    chart.setDrawingCacheEnabled(false);
如果无法在图表上调用getDrawingCache,请尝试将其放置在类似RelativeLayout之类的布局中。并在布局上调用它

之后,您可以将其另存为图像

如果图像仍然为黑色,则需要确保在获取位图之前已创建图表


希望这能帮到你

还是不行。。。我试着设置背景色,看看问题是否出在图表捕获上,或者问题是否出在角色布局上,我得到了一张背景色的图像。我将把我的代码放在这个主题上。我认为问题是(就像我所说的):你试图在创建位图之前获取它。。我注意到,当我遇到同样的问题时,我只能在onCreate完成后才能得到位图。所以你可以试着用graphview和一个按钮创建一个视图,然后把我在答案中发布的代码放在点击按钮的地方(只是为了确保graphview被创建)伙计!说真的,我不知道该怎么感谢你!我被困在这里一个月了,非常感谢!很抱歉,我没有及时回复,这个周末我没带便条。。。谢谢你,工作得很好!=)