我正在尝试创建一个动画来链接视图的两个位置。 View的位置由重写的onLayout方法定义。我使用getLocationOnScreen方法获取位置更新前后的位置。
这是我的代码简化:
int[] startPosition = new int[2];
view.getLocationOnScreen(startPosition);
// do some layout update that changed the view position on screen
requestLayout();
invalidate();
int[] endPosition = new int[2];
view.getLocationOnScreen(endPosition);
Animation anim = new TranslateAnimation(startPosition[0], endPosition[0], startPosition[1], endPosition[1]);
anim.setDuration(100);
view.startAnimation(anim);
问题是在布局更新和对requestLayout的调用之后没有调用onLayout方法...我发现调用requestLayout只会安排视图树的布局传递。所以我的问题是:如何同步进行这种布局计算?还是等待它的结束? 我可以使用postDelayed或将事件系统添加到onLayout方法,但我想首先测试更干净的方法... 我也可以自己调用onLayout方法,但我不确切知道如何计算它的参数。
欢迎任何想法!