Android中的自定义布局:我应该覆盖哪个函数来获取其子对象的尺寸?

Android中的自定义布局:我应该覆盖哪个函数来获取其子对象的尺寸?,android,android-relativelayout,ondraw,Android,Android Relativelayout,Ondraw,我正在尝试实现一个自定义布局,它扩展了RelativeLayout,以便管理其动画内容。动画由文本视图组成,以新闻栏的方式滚动,这是我在中提到的 在应用程序启动后,我从web上加载一个新闻标题列表,创建TextView并以编程方式添加到此自定义布局。为了开始制作文本视图的动画,我需要它们的位置和尺寸。所以,在将TextView添加到我的自定义布局之后,我需要重写一个函数,该函数通过绘制子TextView并正确设置其尺寸来调用。我试图覆盖onDraw,但只调用了一次 这是我的密码: public

我正在尝试实现一个自定义布局,它扩展了RelativeLayout,以便管理其动画内容。动画由文本视图组成,以新闻栏的方式滚动,这是我在中提到的

在应用程序启动后,我从web上加载一个新闻标题列表,创建TextView并以编程方式添加到此自定义布局。为了开始制作文本视图的动画,我需要它们的位置和尺寸。所以,在将TextView添加到我的自定义布局之后,我需要重写一个函数,该函数通过绘制子TextView并正确设置其尺寸来调用。我试图覆盖onDraw,但只调用了一次

这是我的密码:

public class NewsAnimationLayout extends RelativeLayout
{

public NewsAnimationLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
    setWillNotDraw(false);
    // TODO Auto-generated constructor stub
}


public NewsAnimationLayout(Context context, AttributeSet attrs,
        int defStyle) {
    super(context, attrs, defStyle);
    setWillNotDraw(false);
    // TODO Auto-generated constructor stub
}


public NewsAnimationLayout(Context context) {
    super(context);
    setWillNotDraw(false);
    // TODO Auto-generated constructor stub
}

    @Override
    protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

       //Here I will animate child objects.
    }

 };
这个案子我该怎么办,你能给我澄清一下吗


提前谢谢

看来我已经明白了

覆盖
onLayout
就可以做到这一点,似乎每当我们向视图组添加新的子视图以确定它们的位置和尺寸时,Android系统都会调用它

NewsAnimationLayout
类中的此代码报告正确的位置和尺寸:

@Override
protected void onLayout (boolean changed, int left, int top, int right, int bottom) {
    super.onLayout(changed,left,top,right,bottom);
    System.out.println("onLayout");
    //Here I will animate child objects.

    int i;
    for(i=0;i<this.getChildCount();i++)
    {
        View v = this.getChildAt(i);

        System.out.println("Child "+i+" X="+v.getX()+" Y="+v.getY());
        System.out.println("Child "+i+" W="+v.getWidth()+" H="+v.getHeight());
    }
}
@覆盖
仅限受保护的空心布局(布尔值已更改、整数左侧、整数顶部、整数右侧、整数底部){
超级。仅限布局(已更改、左、上、右、下);
System.out.println(“onLayout”);
//在这里,我将设置子对象的动画。
int i;

对于(i=0;ispanetous think;重写子视图类以便它们在
onLayout()上向父视图报告它们的位置不是很容易吗
method?前几天我看了一个
FrameLayout
bug,觉得即使是
FrameLayout
的核心实现也没什么意思,所以我不想急于在它的子处理核心中操纵
RelativeLayout
。好吧,我对什么是
onMeasured()
onLayout()
确实如此。假设我在Web内容回调函数的这个自定义布局中添加子视图类,这些类什么时候会被调用?它们的功能是什么:我在Android文档中对它们感到迷茫和困惑。我完全理解你。但是,对你添加的视图进行子类化大约需要20分钟r
NewsAnimationLayout
并查看他们将通过
onLayout()
接收到什么。据我所知,
onLayout()
是由
layout()
调用的(这是
最终的
,因此没有路径)如果有任何子视图,它会在没有子视图的情况下被调用;因此您可以使用它为您的孩子报告他们在父视图中的位置。啊,当然,您甚至不必这样子类化子视图。很高兴我能提供帮助!