2017-08-10 1 views
1

Ich animiere eine Ansicht nach oben zu seiner endgültigen Position gleiten, wie wir die Aktivität eingeben. Mein Problem ist, dass die Ansicht zu Beginn an der endgültigen Position erscheint, dann springt sie in die Anfangsposition und die Animation beginnt. Wie kann ich das verhindern?Android-Ansicht zeigt momentan an der endgültigen Position vor der Animation

-Code

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(); 

Animator 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" 
    /> 

Einstellung und Neueinstellung Sichtbarkeit hilft ein wenig, aber die Animation does'nt wie erwartet immer

+0

Sie können versuchen, es unsichtbar als Standard über XML-Einstellung und dann machen es sichtbar, wenn Sie die Animation zu starten, wie Sie jetzt tun, aber vielleicht unsichtbar von Anfang an macht es nicht für diesen Moment zu zeigen, bevor es programmatisch unsichtbar macht – Ivan

+0

ja, aber das funktioniert nur, wenn 'onCreate()' aufgerufen wird und immer wenn wir zu diesem Bildschirm zurückkehren, während es im Hintergrund ist, funktioniert das nicht. Ich habe versucht, 'setVisibility (View.INVISIBLE)' in 'onPause()' hinzuzufügen, aber das funktioniert auch nicht. Die Ansicht bleibt immer noch sichtbar. – ColonD

+0

Wo ist Ihre Standard-ImageView-Position? Wo endet die Animation? oder an der ersten Position der Animation? – Ivan

Antwort

2

Sie müssen bewegen die mImageView zu positionieren, von wo es beginnt zu animieren.

Eine Möglichkeit ist mImageView.setTranslationY(500) zu tun, bevor Animation beginnt ..

So:

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(); 

Hoffe, es hilft ..!

+0

danke! Warum erwähnt kein Android Animations Tutorial/API Guide dies explizit :( – ColonD

0

vielleicht könnte dies Ihr Problem lösen.

Aktivität

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); 
} 

Res anim

<?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> 
Verwandte Themen