1

rel次のように動的にイメージビューを追加するという名前の相対レイアウトがあります。

     rel.setBackgroundResource(R.drawable.bg_share_one);

                RelativeLayout.LayoutParams p1 = new RelativeLayout.LayoutParams(921, 691);
                p1.leftMargin = 30;
                p1.topMargin = 30;

                ImageView img = new ImageView(this);
                img.setLayoutParams(p1);
                myBitmap = BitmapFactory.decodeFile(files[0].getAbsolutePath(), option1);
                img.setImageBitmap(myBitmap);

                rel.addView(img);
                saveCompareImage();

次に、このメソッドを呼び出して、相対的なレイアウトのスクリーンショットを撮りますが、追加したイメージビューがビットマップに表示されません:

 protected void saveCompareImage() {
    // TODO Auto-generated method stub

    rel.setDrawingCacheEnabled(true);
    try {

        File file = new File("/sdcard/LC/compare.jpg");
        file.createNewFile();
        Bitmap bm = rel.getDrawingCache();
        FileOutputStream ostream = new FileOutputStream(file);
        bm.compress(Bitmap.CompressFormat.JPEG, 80, ostream);
        ostream.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
4

2 に答える 2

1

おそらく、ハードウェア アクセラレーションが有効になっていますか? setDrawingCacheEnabled()その場合、レンダリングが異なる方法で行われることを示すドキュメント:

ハードウェア アクセラレーションがオンになっている場合、描画キャッシュを有効にしてもレンダリングには影響しません。これは、システムがフラグを無視する別のアクセラレーション メカニズムを使用するためです。ハードウェア アクセラレーションが有効になっている場合でも、ビューにビットマップを使用する場合は、setLayerType(int, android.graphics.Paint) を参照して、ソフトウェア レイヤーとハードウェア レイヤーを有効にする方法を確認してください。

試してみてくださいsetLayerType(LAYER_TYPE_SOFTWARE, null)

于 2012-12-12T20:44:55.583 に答える
0

問題はメジャーを呼び出していませんでした:これは機能します:

protected void saveCompareImage() {
    // TODO Auto-generated method stub

    rel.setDrawingCacheEnabled(true);

    try {
        File file = new File("/sdcard/LC/compare.jpg");
        file.createNewFile();   
        Bitmap bitmap;
        rel.setDrawingCacheEnabled(true);
        rel.measure(MeasureSpec.makeMeasureSpec(rel.getLayoutParams().width, MeasureSpec.EXACTLY),
                MeasureSpec.makeMeasureSpec(rel.getLayoutParams().height, MeasureSpec.EXACTLY));
        rel.layout(0, 0, rel.getMeasuredWidth(), rel.getMeasuredHeight());

        bitmap = Bitmap.createBitmap(rel.getDrawingCache());


        FileOutputStream ostream = new FileOutputStream(file);
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, ostream);
        ostream.close();
    } catch (Exception e) {
        Log.v("ERRRO","e:"+e);
    }
}
于 2012-12-12T21:48:57.343 に答える