3

私はこれにほぼ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);
        }

    }

}
4

1 に答える 1

3

次のようにして、ビューから画像ビットマップを取得できます。

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

チャートで getDrawingCache を呼び出せない場合は、RelativeLayout などのレイアウト内に配置してみてください。レイアウト上で呼び出します。

その後、画像として保存できます。

画像がまだ黒い場合は、ビットマップを取得する前にチャートが作成されていることを確認する必要があります。

これがあなたを助けることを願っています

于 2012-10-25T12:33:51.513 に答える