1

次のコードがあります。

llColors = (LinearLayout) findViewById(R.id.llColorSpect);
    llColors.setOnTouchListener(llTouch);

    width = llColors.getWidth();
    height = llColors.getHeight();

    Log.i("LAYOUT WIDTH", "width" +width); //shows 0
    Log.i("LAYOUT HEIGHT", "height" +h); //shows the correct height

私を混乱させているのは、なぜ がLAYOUT WIDTH0 なのかということです。XML では、レイアウトの幅を にmatch_parent、高さをに設定していますwrap_content

Bitmap以下でデコードし、幅fill_parentの上のレイアウトを埋めるにはどうすればよいですか? LayoutParams を使用しますか?

bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.palette2);

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

<LinearLayout
    android:id="@+id/llColorSpect"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/palette2"
    android:layout_alignParentBottom="true" >
</LinearLayout>

私が達成しようとしているのは、リーマン用語で、レイアウトを取得して背景画像で塗りつぶし、ピクセルを使用して X 座標と Y 座標を取得することです。

4

2 に答える 2

1

widthが 0 である限り、 はlayoutまだ描き終わっていない可能性があります。OnGlobalLayoutListenerいつ描かれたかは知っていました。これは、印刷できるようにlayoutaを作成するために行ったコードの一部です。Bitmap少し違うがコンセプトは同じ。

@Override 
public void onGlobalLayout() 
{
    String path = null;
        try {
            path = Environment.getExternalStorageDirectory().getPath().toString();
            FileOutputStream out = new FileOutputStream(path + "/testPrint" + "0" + ".png");
            Bitmap bm = Bitmap.createBitmap(root.getDrawingCache(), 0, 0, 
                    root.getWidth(), root.getHeight());                             
            bm.compress(Bitmap.CompressFormat.PNG, 90, out);                
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   

私が手に入れるために必要だっrootた膨らんだものはどこにありますか。layoutwidth

listenerそして、次のようなものを設定できます

ViewTreeObserver vto = view.getViewTreeObserver();
vto.addOnGlobalLayoutListener((OnGlobalLayoutListener) root.getContext());

OnGlobalLayoutListener ドキュメント

于 2014-01-30T19:06:51.607 に答える
1

電話するのがgetWidth()早すぎます。UI はまだサイズ変更されておらず、画面に配置されていません。

onWindowFocusChanged()関数をオーバーライドした後、サイズを取得してみてください。

@Override
 public void onWindowFocusChanged(boolean hasFocus) {
  super.onWindowFocusChanged(hasFocus);
  //Here you can get the size!
 }

この議論を見てください

ビットマップを親の高さと幅に一致させたい場合は、これを使用できます。

LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
imageView.setImageBitmap(bitmap);
imageView.setLayoutParams(params);

お役に立てれば :)

于 2014-01-30T18:59:57.260 に答える