2

画像、テキストを含むレイアウトをビットマップに変換して、アプリに pagecurl 効果を実装したいと考えています。

私のxmlは

details.xml

 <?xml version="1.0" encoding="utf-8"?>
  <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background= "#E0FFFF"
    android:gravity="center"
    android:orientation="vertical" >
    <FrameLayout 
       android:id="@+id/framelayout"
       android:layout_marginTop="30dip"
       android:layout_height="fill_parent" 
       android:layout_width="fill_parent">
      <RelativeLayout
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:id="@+id/Rl">
                <TextView
                  android:id="@+id/tvName"
                  android:layout_width="wrap_content"
                  android:layout_height="60dip"
                  android:layout_alignParentTop="true"
                  android:layout_centerHorizontal="true"
                  android:text="BookName"
                  android:textSize="40dip"
                  android:textStyle="bold" />
               <TextView
                  android:id="@+id/tTitle"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_below="@id/tvName"
                  android:text="Page Name"
                  android:textColor="#040404"
                  android:textSize="30dip"
                  android:textStyle="bold"
                  android:typeface="sans" />
              <ImageView
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:layout_alignWithParentIfMissing="false"
                  android:layout_below="@id/tTitle"
                  android:baselineAlignBottom="true"
                  android:scaleType="fitXY"
                  android:src="@drawable/stub"
                  android:id="@+id/smallImage"
                />
          <TextView
               android:id="@+id/tDescription"
               android:layout_width="match_parent"
               android:layout_height="wrap_content"
               android:textSize="15dip"
               android:layout_below="@id/smallImage" />
           <Button
               android:id="@+id/buy_button"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:layout_alignBottom="@+id/tTitle"
               android:layout_alignParentRight="true"
               android:layout_alignParentTop="true"
               android:layout_marginRight="22dp"
               android:text="buy"
               android:visibility="visible"/>
           <Button
               android:id="@+id/bLib"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:layout_alignParentLeft="true"
               android:layout_below="@+id/tDescription"
               android:text="Go to Library"
               android:textSize="20dip"
               android:textStyle="italic" 
              />
               <Button
               android:id="@+id/backD"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:layout_toRightOf="@+id/bLib"
                 android:layout_alignParentRight="true"
                android:layout_below="@id/tDescription"
               android:text="Back to Home" 
               android:textStyle="bold"
               android:textSize="20dip"
               />
    </RelativeLayout>
    </FrameLayout>
    </ScrollView>

このレイアウトをビットマップに変換する私のJavaクラスは

    public void onCreate(Bundle savedInstanceState) 
    {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.details);
      FrameLayout view = (FrameLayout)findViewById(R.id.framelayout);
      view.setDrawingCacheEnabled(true);
      view.buildDrawingCache();
      Bitmap bm = view.getDrawingCache();
      System.err.println("getting bitmap.."+bm);
    }

ここでレイアウト値を設定する方法が見つかりません..ここでビットマップbm値をnullとして取得しています.そのレイアウトをビットマップに変換し、それらの値をビットマップに設定する方法を誰かに提案してもらえますか?

4

2 に答える 2

1

この問題を解決するために、ビットマップを保存した後、drawingcacheを破棄します。

view.destroyDrawingCache();

以下のコードに従ってビットマップを保存します。

view.measure(100, 100);
view.layout(0, 0, 100, 100);
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap b = Bitmap.createBitmap(view.getDrawingCache());
于 2013-01-11T05:43:35.573 に答える
0

ビットマップの取得中にメモリ不足になっていないかどうかを確認します。

置く

try   
{....}
catch(OutOfMemoryException ex)
{}

もう 1 つの問題として、ビットマップを取得しているときにビューが描画されないことがあります。同じ手順を実行するには、ボタンの onclick 関数を使用してみてください。

于 2013-01-11T05:48:17.897 に答える