在Android的绘图之前测量所有视图层次 [英] Measure all view hierarchy before drawing in Android

查看:93
本文介绍了在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆