3

私は Android アプリケーションで作業しており、オーバーライドされたメソッド onCreate() で現在のアクティビティの画面をキャプチャしたいと考えています。Overrided メソッド onCreate() 内で画面をキャプチャするためのコードを記述したとき、ビットマップは null を返します。しかし、同じアクティビティのボタン クリックで同じコードを呼び出すと、ビットマップは正しい値を返します。ocCreate() メソッド自体でビットマップによって返されるようにコードを修正してください。

私のコードは次のとおりです。

View v1 = findViewById(R.id.printpreviewBaseScrollView);
v1.setDrawingCacheEnabled(true);
Bitmap bmv = v1.getDrawingCache();
4

5 に答える 5

1
View printlayout = findViewById(R.id.printpreviewBaseRelativeLayout);
        printlayout.setDrawingCacheEnabled(true);

        printlayout.measure(printlayout.getMeasuredWidth(),
                printlayout.getMeasuredHeight());

         printlayout.layout(0, 0, 700, 1755);



        Log.e("width", "" + printlayout.getMeasuredWidth());
        Log.e("hight", "" + printlayout.getMeasuredHeight());

        printlayout.buildDrawingCache(true);

        bitmap = Bitmap.createBitmap(printlayout.getDrawingCache());
        printlayout.setDrawingCacheEnabled(false); // clear drawing cache
于 2012-11-02T06:13:28.363 に答える
0

メソッド'onCreate()'が示唆しているように、この瞬間にアクティビティが作成されます。そのため、現時点ではスクリーンキャプチャを取得できません。'onResume()'でコードを試してください:

...
@Override
public void onResume(){
    View v1 = findViewById(R.id.printpreviewBaseScrollView);
    v1.setDrawingCacheEnabled(true);
    Bitmap bmv = v1.getDrawingCache();
}
...
于 2012-11-01T08:03:11.607 に答える
0

onCreate より後で行う必要があります。onCreate の間、レイアウトは測定されて膨張しますが、UI はまだ作成されていません。アクティビティ ライフ サイクルのドキュメントを参照してください。

http://developer.android.com/training/basics/activity-lifecycle/starting.html

@Override
public void onStart(){
     View v1 = findViewById(R.id.printpreviewBaseScrollView);
     v1.setDrawingCacheEnabled(true);
     Bitmap bmv = v1.getDrawingCache();
}

コードをコピーして貼り付けました。おそらく、v1 をクラス レベルの変数にし、その参照を onCreate() に設定してから、onStart() でビットマップを取得する必要があります。

于 2012-11-01T08:01:03.327 に答える
0

void screenshot(){ Your btimap code } Onactivity call screenshot(); というメソッドを作成します。

于 2012-11-01T08:01:12.060 に答える
-1

アンドロイドのドキュメントによると

アクティビティの目に見える有効期間は、onStart() の呼び出しから対応する onStop() の呼び出しまでの間に発生します。この間、ユーザーは画面上でアクティビティを見ることができますが、フォアグラウンドでユーザーと対話していない場合があります。

ここに画像の説明を入力

上記のグラフからわかるように、onCreate()が実行された時点では可視の有効期間ではなく、スクリーンショットを取得できません。

コードをonResume()に移動します。これは、可視の lifetimeにある必要があります。

于 2012-11-01T08:02:32.107 に答える