前一段时间,我编写了一个自定义过渡,除了ChangeBounds动画外,该过渡还为视图高程,背景色和角半径设置了动画。 VIDEO VIDEO2
现在,由于我需要进行更多的自定义,我决定检查ChangeBounds的源代码以了解其工作原理。
这是ChangeBounds的一段代码,您可能知道它是一个共享元素过渡,可以动画显示视图边界和位置。
sceneRoot.getLocationInWindow(tempLocation);
Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),
Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
view.draw(canvas);
final BitmapDrawable drawable = new BitmapDrawable(bitmap);
view.setVisibility(View.INVISIBLE);
sceneRoot.getOverlay().add(drawable);
Rect startBounds1 = new Rect(startX - tempLocation[0], startY - tempLocation[1],
startX - tempLocation[0] + view.getWidth(),
startY - tempLocation[1] + view.getHeight());
Rect endBounds1 = new Rect(endX - tempLocation[0], endY - tempLocation[1],
endX - tempLocation[0] + view.getWidth(),
endY - tempLocation[1] + view.getHeight());
ObjectAnimator anim = ObjectAnimator.ofObject(drawable, "bounds",
sRectEvaluator, startBounds1, endBounds1);
anim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
sceneRoot.getOverlay().remove(drawable);
view.setVisibility(View.VISIBLE);
}
});
它不是执行视图的实际测量,而是这样做:
我的自定义过渡实现非常接近this one。注意它是如何操纵视图背景的。
现在,我希望链接的代码或我自己的实现在视觉上不起作用,因为它们基于使用超类声明为不可见的视图。但是它们工作得很好。我在这里想念什么?