在Android的绘图之前测量所有视图层次 [英] Measure all view hierarchy before drawing in Android
问题描述
我有一个视图hiererchy:
I have next view hiererchy:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:gravity="center">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/group_bg"
android:gravity="center_vertical"
android:baselineAligned="false">
<LinearLayout
android:id="@+id/itemplace"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:layout_weight="1" >
<include
android:layout_width="wrap_content"
android:layout_height="wrap_content"
layout="@layout/pin" />
</LinearLayout>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/arrow_black"/>
</LinearLayout>
</LinearLayout>
我需要得到itemplace width此层次将被绘制之前。因为我用API 7级,我不能使用OnLayoutChangeListener。
I need to get itemplace width before this hierarchy will be drawing. I can not use OnLayoutChangeListener because I use API level 7.
我知道,我必须用测量()和布局()方法来计算自己的看法大小,但我不知道热它做的。
I know that I must use measure() and layout() methods to calculate size of my views but I dont know hot it to do.
在我的层次结构的根视图必须填写屏幕所有的宽度,因此itemplace宽度取决于父母的大小,父母填充和宽度的FrameLayout的。
Root view in my hierarchy must fill all width of screen, so itemplace width depended of parent size, parent paddings and FrameLayout width.
我必须做的就是它的宽度?
What must I do to get it width?
推荐答案
我已经找到办法让视图宽度。 Android的measuret后,我可以得到它,但在使用ViewTreeObserver在preDrawListener绘制前:
I have find out way to get view width. I can get it after android measuret it but before drawing using OnPreDrawListener in ViewTreeObserver:
view.getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener()
{
@Override
public boolean onPreDraw()
{
int avaliableWidth = view.getWidth() - view.getPaddingLeft() - view.getPaddingRight();
Log.d("width", String.valueOf(avaliableWidth));
return true;
}
});
从Android文档:
From Android documentation:
当视图树即将被吸引到被调用的回调方法。
此时,树中的所有视图已测量并给出一个
帧。客户端可以用这个来调整自己的滚动界限甚至
绘图发生之前申请一个新的布局。
Callback method to be invoked when the view tree is about to be drawn. At this point, all views in the tree have been measured and given a frame. Clients can use this to adjust their scroll bounds or even to request a new layout before drawing occurs.
这篇关于在Android的绘图之前测量所有视图层次的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!