在Android中将图表导出为图像
我在这里面呆了差不多一个月了。我的android代码中有一个完美的图表,使用“afreechart”,但是,该库似乎还不支持将图表导出为图像(因为它基于“jfreechart”,而这一个就完成了这项工作) 我尝试获取图表的视图,将其转换为画布,并使用位图库的压缩功能进行保存,但是每次尝试都会得到一个完全黑色的图像。我尝试了同样的方法,它适用于代码的其他视图(简单视图,如linearlayout和relativelayout) 之后,我尝试创建一个例程来制作图表活动的屏幕截图,然后关闭该活动。但我找不到一种通过代码实现的方法,我得到的最接近的方法是monkeyrunner 所以我放弃了这个想法,尝试寻找其他库,如“kichart”、“achartengine”等,但它们似乎都没有完成这项工作,我吓坏了,我认为将图表导出到图像不会那么难。。。有什么想法吗 当我为布局设置背景颜色时,返回的图像是一个带有背景颜色的完整矩形,因此它得到的是布局,而不是图表 我的代码:在Android中将图表导出为图像,android,image,charts,export,save,Android,Image,Charts,Export,Save,我在这里面呆了差不多一个月了。我的android代码中有一个完美的图表,使用“afreechart”,但是,该库似乎还不支持将图表导出为图像(因为它基于“jfreechart”,而这一个就完成了这项工作) 我尝试获取图表的视图,将其转换为画布,并使用位图库的压缩功能进行保存,但是每次尝试都会得到一个完全黑色的图像。我尝试了同样的方法,它适用于代码的其他视图(简单视图,如linearlayout和relativelayout) 之后,我尝试创建一个例程来制作图表活动的屏幕截图,然后关闭该活动。但我
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被创建)伙计!说真的,我不知道该怎么感谢你!我被困在这里一个月了,非常感谢!很抱歉,我没有及时回复,这个周末我没带便条。。。谢谢你,工作得很好!=)