0

ImageView私はその上に1つと2つの単純な組み合わせを持ってTextViewsいます。TextViewsオーバーラップを作成してからImageView、組み合わせ全体を(たとえばPNGとして)保存したいと思います。

すでに行っているを使用して、TextViews上に重ねることができることを知っています。今私が疑問に思っているのは、どうすればそれを画像にエクスポートできますか?ImageViewFrameLayout

Canvasの使用に関するさまざまな投稿を読みました。たとえば、をPNG画像としてエクスポートする方法はありFrameLayoutますか、またはキャンバスを作成し、ImageViewとを追加してTextViews、キャンバス自体をPNGとしてエクスポートする必要がありますか?

前もって感謝します。

4

1 に答える 1

6

簡単にできますか?、 はい

どのように?

さて、私は先日このための関数を作成しました、そしてそれは本当に簡単です(あなたが外部デバイスへの書き込み許可を持っていることを確認してください)。に「ペイント」するビュー(すべての子ビューも含まれます)を指定するだけでBitmap、後で、言うようにファイルとして保存するか、アプリのどこかで使用できます。

public void captureView(int viewId,String filename){
    //Find the view we are after
    View    view = (View) findViewById(viewId);
    //Create a Bitmap with the same dimensions 
    Bitmap image = Bitmap.createBitmap(view.getWidth(), 
                                       view.getHeight(), 
                                       Bitmap.Config.RGB_565);
    //Draw the view inside the Bitmap
    view.draw(new Canvas(image)); 

    //Store to sdcard
    try {
       String path = Environment.getExternalStorageDirectory().toString();
       File myFile = new File(path,filename);
       FileOutputStream out = new FileOutputStream(myFile);

       image.compress(Bitmap.CompressFormat.PNG, 90, out); //Output
    } catch (Exception e) {
       e.printStackTrace();
    }
}

onCreateビューが描画される前にビューの幅と高さを取得しようとする可能性があり、ビットマップの寸法を0にできないためエラーが発生する可能性があるため、メソッドでこのコードを実行しようとしないでください。

ビューをそのままキャプチャしますか、それとも作成されたままキャプチャしますか?

最初はよくわかりませんでしたが、少しテストしたところ、表示されるものが得られるものであるように見えます。したがって、起動時の元の配置とは異なる回転または異なるものがある場合は、これがキャプチャに反映されます。これはあなたが求めているものかもしれないし、そうでないかもしれませんが、それが提供するものです。キャプチャされた例を次に示しますLinearLayout(スクリーンショットやトリミングはなく、デバイスから直接送信されます)。

ビューキャプチャ

于 2012-05-17T23:09:26.607 に答える