android视图在动画开始前的最终位置瞬时显示

android视图在动画开始前的最终位置瞬时显示,android,android-animation,Android,Android Animation,我正在设置视图动画,以便在进入活动时向上滑动到其最终位置。我的问题是,视图在开始时瞬间出现在最终位置,然后跳到初始位置,然后动画开始。我怎样才能防止这种情况 代码 protected void onResume() { mImageView.setVisibility(View.INVISIBLE); super.onResume(); Animator animator = new ObjectAnimator(); animator = AnimatorInf

我正在设置视图动画,以便在进入活动时向上滑动到其最终位置。我的问题是,视图在开始时瞬间出现在最终位置,然后跳到初始位置,然后动画开始。我怎样才能防止这种情况

代码

protected void onResume() {
    mImageView.setVisibility(View.INVISIBLE);
    super.onResume();
    Animator animator = new ObjectAnimator();
    animator = AnimatorInflater.loadAnimator(this,R.animator.slide_up_lock_icon);
    //animator.setStartDelay(500);
    animator.setTarget(mImageView);
    animator.setInterpolator(new AccelerateDecelerateInterpolator());
    mImageView.setVisibility(View.VISIBLE);
    animator.start();
动画师XML:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:propertyName="translationY"
    android:valueFrom="500"
    android:valueTo="0"
    android:valueType="floatType"
    android:startOffset="500"
    />


设置和重置可见性会有所帮助,但动画并非总是像预期的那样工作

您必须
mImageView
移动到它将开始制作动画的位置

一种方法是在动画开始之前执行
mImageView.setTranslationY(500)

像这样:

 mImageView.setVisibility(View.INVISIBLE);
 mImageView.setTranslationY(500);

 Animator animator = new ObjectAnimator();
 animator = AnimatorInflater.loadAnimator(this,R.animator.slide_up_lock_icon);
 //animator.setStartDelay(500);
 animator.setTarget(mImageView);
 animator.setInterpolator(new AccelerateDecelerateInterpolator());
 mImageView.setVisibility(View.VISIBLE);
 animator.start();

希望对你有帮助

也许这可以解决你的问题

活动

protected void onResume() {
    super.onResume();
    //Here tv is your view
    tv.setVisibility(View.GONE);
    //Create an animation
    Animation animation = AnimationUtils.loadAnimation(this, R.anim.slide_up_lock_icon);
    //Set your view's visibility to Visible
    tv.setVisibility(View.VISIBLE);
    //Start animation on tv
    tv.startAnimation(animation);
}
动物研究

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
  <translate
      android:duration="1000"
      android:fromYDelta="yourValueHere%"
      android:toYDelta="otherValueHere" />
</set>


您可以尝试通过XML将其默认设置为不可见,然后在启动动画时使其可见,就像现在一样,但如果从一开始就不可见,可能会使其在使其不可见之前暂时不显示,但这仅适用于
onCreate()
被调用,当它在后台不工作时,我们随时返回此屏幕。我尝试在
onPause()
中添加
setVisibility(View.INVISIBLE)
,但这也不起作用。初始视图仍保持可见默认的ImageView位置在哪里?动画在哪里结束?还是在动画的第一个位置?谢谢!为什么android动画教程/API指南没有明确提到这一点:(