我有以下代码:
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 WIDTH
为什么是0.在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坐标。
答案 0 :(得分:1)
您过早地致电getWidth()
。用户界面尚未调整大小并在屏幕上显示。
在覆盖onWindowFocusChanged()
函数后尝试获取大小:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
//Here you can get the size!
}
看看这个discussion
如果您希望您的位图与父高度和宽度匹配,您可以使用:
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
imageView.setImageBitmap(bitmap);
imageView.setLayoutParams(params);
希望这会有所帮助:)
答案 1 :(得分:1)
至于width
为0,layout
可能尚未完成绘制。我使用OnGlobalLayoutListener
知道它何时被绘制。这里有一些代码,我是如何使layout
成为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
是我需要获得layout
的{{1}}。
您可以将width
设置为
listener