Mat*_*tej 6 android measure android-layout
为什么lColorWheel.getWith()方法返回0?我想这与onMeasure事件有关,但我真的无法从文档中了解它是如何工作的.我必须为mDrawable设置尺寸?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_light);
ShapeDrawable mDrawable;
ivColorWheel=(ImageView)findViewById(R.id.ivColorWheel);
lColorWheel=findViewById(R.id.lColorWheel);
ld=(LayerDrawable)getResources().getDrawable(R.drawable.colorwheel);
mDrawable = new ShapeDrawable(new OvalShape());
mDrawable.setIntrinsicWidth(lColorWheel.getWidth());
mDrawable.setIntrinsicHeight(lColorWheel.getHeight());
Log.d("lColorWheel.getWidth()",Integer.toString(lColorWheel.getWidth())); //returns 0, why?
Log.d("lColorWheel.getHeight()",Integer.toString(lColorWheel.getHeight())); //returns 0, why ?
Run Code Online (Sandbox Code Playgroud)
和适当的XML文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background"
android:gravity="center_horizontal"
android:addStatesFromChildren="true" >
<RelativeLayout
android:id="@+id/lColorWheel"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="20dp"
android:layout_centerHorizontal="true"
android:adjustViewBounds="true">
<ImageView
android:id="@+id/ivColorWheel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:adjustViewBounds="true"
android:paddingBottom="0dp"
android:paddingTop="0dp"
android:src="@drawable/iconwheel"
/>
<ImageView
android:id="@+id/ivCenterButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:maxHeight="5dp"
android:maxWidth="5dp"
android:onClick="clc"
android:paddingBottom="0dp"
android:paddingLeft="0dp"
android:paddingRight="0dp"
android:paddingTop="0dp"
android:src="@drawable/center3" />
</RelativeLayout>
<SeekBar
android:id="@+id/sbColorIntensity"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_alignParentLeft="true"
android:layout_below="@id/lColorWheel"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="20dp"
android:background="@drawable/colorintensitystrip"
android:max="255"
android:maxHeight="-25dp"
android:thumb="@drawable/thumb"
android:thumbOffset="0dp"
/>
<SeekBar
android:id="@+id/sbOrientation"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_alignParentLeft="true"
android:layout_below="@id/sbColorIntensity"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="20dp"
android:background="@drawable/orientationstrip"
android:max="255"
android:maxHeight="-25dp"
android:thumb="@drawable/thumb"
android:thumbOffset="0dp"
/>
<SeekBar
android:id="@+id/sbWhiteIntensity"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_alignParentLeft="true"
android:layout_below="@id/sbOrientation"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="20dp"
android:background="@drawable/whiteintensitystrip"
android:max="255"
android:maxHeight="-25dp"
android:thumb="@drawable/thumb"
android:thumbOffset="0dp"
/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
谢谢
Chi*_*hod 15
如果要在渲染完成之前使用它们,则需要测量视图的高度和宽度.
以下代码将帮助您测量任何视图的高度和宽度.
imgView.measure(
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
imgView.layout(0, 0,
imgView.getMeasuredWidth(),
imgView.getMeasuredHeight());
Run Code Online (Sandbox Code Playgroud)
在使用视图的高度和宽度之前编写此代码.
有时这种方法不会给出正确的结果.还有其他选择.下面的代码将在屏幕上绘制之前计算高度和宽度.
ViewTreeObserver viewTree = imgView.getViewTreeObserver();
viewTree.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
public boolean onPreDraw() {
finalHeight = imgView.getMeasuredHeight();
finalWidth = imgView.getMeasuredWidth();
//print or do some code
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8273 次 |
| 最近记录: |