Android的requestLayout()是否适合布局动画?

时间:2013-06-07 16:15:04

标签: android android-layout

requestLayout()方法是否是在Android中创建动画版面的正确工具?

我们使用Adobe / Apache Flex工作了几年,并且知道两种方法invalidateProperties()commitProperties()。 Android的requestLayout()layout()似乎有类似的用途。但是docs提到了一个开销。

public class Paginator extends ViewGroup {
    private float animatedCurrentPage = 1;
    private final ObjectAnimator objectAnimator;

    public Paginator(Context context, AttributeSet attrs) {
        super(context, attrs);
        objectAnimator = ObjectAnimator.ofFloat(this, "animatedCurrentPage", 0f);
    }

    public void jumpToPage(int page) {
        objectAnimator.cancel();
        objectAnimator.setFloatValues(animatedCurrentPage, page);
        objectAnimator.start();
    }

    public void setAnimatedCurrentPage(float animatedCurrentPage) {
        this.animatedCurrentPage = animatedCurrentPage;
        requestLayout(); // <== queue an update of the layout
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // measure children here
    }

    @Override
    protected void onLayout(boolean changed, final int l, final int t, final int r, final int b) {
        // layout children here
    }
}

1 个答案:

答案 0 :(得分:0)

我认为“invalidate()”应该通过调用而不是link

  

通过遍历树并渲染每个视图来处理绘图   与无效区域相交。因为树是按顺序遍历的,   这意味着父母将在他们的之前(即后面)抽签   孩子们,兄弟姐妹按照他们出现在树上的顺序画出来。如果   您为View设置了一个可绘制的背景,然后View将绘制它   在回调它的onDraw()方法之前为你服务。

     

请注意,框架不会绘制不在无效区域中的视图。

     

要强制绘制视图,请调用invalidate()。