私はこれにほぼ1か月間立ち往生しています。「afreechart」を使用してAndroidコードに完璧なチャートを作成しましたが、ライブラリはチャートを画像としてエクスポートすることをまだサポートしていないようです(「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);
}
}
}