我想知道如何在没有动画的情况下从上到下连续移动视图。我问这个是因为我想在每一步获取视图的位置,以便我可以检查该视图与任何其他视图之间是否存在任何冲突。
使用动画,您可以将视图从一个位置移动(不是精确地移动)到另一个位置(Animator类),但是动画会向用户产生幻觉,它正在移动,但它的位置始终是固定的。所以这不能用动画来完成吗?
第二种方法是增加观点的位置。我在onCreate()
中应用了此方法。如果我在没有Thread.sleep(50)
的情况下使用它,则活动不会显示该视图,如果我将其应用于Thread.sleep(50)
,则活动不会在一段时间内启动。
答案 0 :(得分:1)
属性动画(Animator类的子类)实际上会移动视图,因为它们会更新视图的实际属性。视图动画(动画类的子类)不会移动实际视图,而是移动到用户所在的位置。 来源:http://developer.android.com/guide/topics/graphics/prop-animation.html Quote:使用属性动画系统,这些约束被完全删除,并且您可以为任何对象(视图和非视图)的任何属性设置动画,并且实际修改了对象本身。
你也不应该开始在onCreate方法中移动东西,因为事情仍在初始化(推荐使用onwindowfocuschanged)。此外,如果你调用thread.sleep,你将睡眠主UI线程,因此冻结应用程序一段时间。
答案 1 :(得分:0)
使用ValueAnimator解决问题: -
CodeSnippet: -
va=ValueAnimator.ofFloat(0.0f,size.y);
va.setDuration(5000);
va.setRepeatCount(va.INFINITE);
va.setRepeatMode(va.REVERSE);
va.start();
va.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
// TODO Auto-generated method stub
bullet[0].setTranslationY((Float) va.getAnimatedValue());
Rect R11=new Rect(bullet[0].getLeft(),bullet[0].getTop()+(int)bullet[0].getTranslationY(),bullet[0].getRight(),bullet[0].getBottom()+(int)bullet[0].getTranslationY());
Rect R21=new Rect(ball.getLeft(), ball.getTop(), ball.getRight(), ball.getBottom());
if(R11.intersect(R21))
va.cancel();
}
});