2012-01-11 13 views
1

私はレイアウトを膨らませることによって、ビューをプログラム的に作成しようとしています。ビューのビットマップを作成する

View marker = ((LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.overlay_view, null); 

は、今私は、ビットマップには、このビューを変換したい:

public static Bitmap createDrawableFromView(Context context, View view){ 
     DisplayMetrics displayMetrics = new DisplayMetrics(); 
     ((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 

     view.measure(displayMetrics.widthPixels, displayMetrics.heightPixels); 
     view.layout(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels); 

     Bitmap cache = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888); 

     Canvas canvas = new Canvas(cache); 
     view.draw(canvas); 

     return cache; 
    } 

私も何も変更せずに対策(1、1)およびレイアウト(0、0、0、0)を試してみました。 ビットマップは塗りつぶされたレイアウトのように見えます。 問題:Viewに何かを置くと、ViewがViewSizeよりも幅や高さが大きくなります(例:長いテキストのTextView)、ビットマップも大きくなります。 ビューのXMLの幅と高さはWRAP_CONTENTですが、機能しませんでした。 私はBitmapだけが必要なので、このビューをどこかに置いて表示することはありません。

質問:ビューを最大幅= displayWidthにラップするにはどうすればよいですか?

私はview.setLayoutParams(新しいLayoutParam(100,100))を試しましたが、それは100よりも大きかったのですか?私は実際に何が起こったのか分からず、レイアウトを膨らませてビューの内容を設定すると、本当に分かりません。

view.getMeasuredWidthとHeightは常に私のディスプレイよりも大きいですか?ここで

を(私はそれで何か大きなものを入れている場合)のレイアウトの例です:

最初のステップ:ビューに新しいLayoutParamsを追加

<RelativeLayout android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@drawable/somedrawable" 
     android:padding="10dp" 
     android:clickable="true"> 
     <TextView android:id="@+id/name" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Name"/> 
     <TextView android:id="@+id/description" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/name" 
      android:text="Description" 
      android:textSize="20dp" 
      android:textColor="#ffffff"/> 
    </RelativeLayout> 
+0

[回答を確認](http://stackoverflow.com/questions/8294110/taking-screenshot/8366223#8366223) –

+0

ハム?答えはどこですか?答えはありましたが、それは今行っていますか? – Informatic0re

+0

私が与えたリンクをチェックしてください。 –

答えて

0

私は解決策を見つけました。あなたがいなくてもNullPointerが得られるので、これは重要です。第二に

view.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 

は:

view.measure(MeasureSpec.makeMeasureSpec(displayMetrics.widthPixels), MeasureSpec.AT_MOST), 
      MeasureSpec.makeMeasureSpec(displayMetrics.heightPixels, MeasureSpec.AT_MOST)); 

view.measure()のために私はMeasureSpec.makeMeasureSpec(displayMetrics.heightPixels, MeasureSpec.AT_MOST));を使用しました。最初のパラメータは表示幅または高さで、2番目のパラメータはAT_MOSTモードです。これはビューを "ラップする"ために必要です。

素晴らしい作品です! (私にとっては:p)

関連する問題