1

このFrameLayoutがLinearLayoutにあります:

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/desktopsFramelayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="none"
        android:src="@drawable/accept" />

</FrameLayout>

次に、コードで次のようにDrawableに変換してみます。

FrameLayout desktopFrameLayout = (FrameLayout)findViewById(R.id.desktopsFramelayout);

        desktopFrameLayout.setDrawingCacheEnabled(true);
        desktopFrameLayout.buildDrawingCache();     
        Bitmap bitmap = desktopFrameLayout.getDrawingCache();

bitmapnullなぜ???

4

3 に答える 3

1

このリンクをチェックして、nininho の回答を読んでください: Android View.getDrawingCache returns null, only null

ビューにはディメンション (0,0) があるため、これは null を返すと思います

于 2013-03-05T11:53:25.273 に答える
0
Bitmap b = null;
desktopFrameLayout.post(new Runnable() {
    desktopFrameLayout.setDrawingCacheEnabled(true);
    desktopFrameLayout.buildDrawingCache();     
    b = desktopFrameLayout.getDrawingCache();
});
于 2013-03-05T11:57:41.377 に答える
0

おそらく、DrawingCache を有効にしたばかりで、FrameLayout にはまだビルドする時間がなかったためです。

xml で drawingCacheEnabled を割り当てて、desktopFrameLayout.getDrawingCache(); を呼び出してみてください。

その後、要求するとキャッシュが構築される場合があります。

そうでない場合は、ライフサイクルの後半で試してください。

于 2013-03-05T11:53:17.467 に答える