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
}
}
答案 0 :(得分:0)
我认为“invalidate()”应该通过调用而不是link
通过遍历树并渲染每个视图来处理绘图 与无效区域相交。因为树是按顺序遍历的, 这意味着父母将在他们的之前(即后面)抽签 孩子们,兄弟姐妹按照他们出现在树上的顺序画出来。如果 您为View设置了一个可绘制的背景,然后View将绘制它 在回调它的onDraw()方法之前为你服务。
请注意,框架不会绘制不在无效区域中的视图。
要强制绘制视图,请调用invalidate()。