0

以下のコードを試しましたが、実行するとAndroidモバイルでは黒い画面の画像が表示され、エミュレーターではファイルが表示されます。このファイルを開くと、プレビューが利用できないというメッセージが表示されます。

View v = activity.getWindow().getDecorView();

    v.setDrawingCacheEnabled(true);
    v.destroyDrawingCache();

    int width = activity.getWindowManager().getDefaultDisplay().getWidth();
    int height = activity.getWindowManager().getDefaultDisplay().getHeight();
    v.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 
             MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
    v.layout(0, 0, width, height); 

    v.buildDrawingCache(true);
    Bitmap b = Bitmap.createBitmap(v.getDrawingCache());
    v.setDrawingCacheEnabled(false); // clear drawing cache

    FileOutputStream fos = null;
    File fTree = new File(sdCardRoot,"/fi.png");
    fTree.createNewFile();

    try {

        fos = new FileOutputStream(fTree,true);
        if (null != fos) {
            b.compress(Bitmap.CompressFormat.PNG, 90, fos);
            fos.flush();
            fos.close();
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

誰か助けてください。ありがとうございました。

4

2 に答える 2

1

じゃあオーケー。以下のメソッドをオーバーライドする必要がある場合があります。問題は、ビューがまだ作成されておらず、実際には存在しない背景を取得しようとしているため、画像が取得されないためです。

これを試して、

 @Override 
public void onWindowFocusChanged(boolean hasFocus) 
{ 
   // add the entire code for getting the background within this and it will work 
} 

ビューが描画されると、このメソッドが呼び出されるため、このメソッドをオーバーライドすることで必要な出力が得られます。

于 2012-06-18T07:43:30.843 に答える
0

アクティビティは onCreate() が終了した後にのみ表示されるため、これは onCreate() では機能しません。onCreate() が終了したら、何らかのイベントをトリガーしてコードを実行します。ボタンイベントの onClick() の場合があります。

于 2012-10-25T21:04:46.670 に答える