1

我正在尝试实现一个自定义布局,它扩展了 RelativeLayout,以管理其动画内容。动画由 TextViews 组成,以新闻栏的方式滚动,我在RelativeLayout 中提到过 android:clipChildren="false" 不起作用:动画会被剪辑吗?

应用程序启动后,我从 Web 下载新闻标题列表,然后创建 TextView 并以编程方式添加到此自定义布局中。为了开始为 TextView 设置动画,我需要它们的位置和尺寸。因此,在将 TextViews 添加到我的自定义布局后,我需要重写一个函数,该函数在绘制子 TextViews 并正确设置其尺寸时调用。我试图覆盖 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.
    }

 };

在这种情况下我该怎么办,你能澄清一下吗?

提前致谢

4

1 回答 1

0

看来我想通了。

覆盖onLayout可以解决问题,似乎每当我们将新子项添加到 ViewGroup 时,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());
    }
}
于 2013-04-04T14:49:15.017 回答