2017-01-06 11 views
0

Я хотел бы изменить масштаб анимации с некоторой задержкой времени, прежде чем обратная анимация ниже - это код, который работает для обратного с бесконечным, но мне нужно установить промежуток времени, анимацииОбратный Zoomin Анимация с некоторым заданным промежутком времени для просмотра изображений

zoom_in.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
android:fillAfter="true" > 
<scale 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:repeatMode="reverse" 
    android:duration="5000" 
    android:fromXScale="1" 
    android:fromYScale="1" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:toXScale="2" 
    android:toYScale="2" > 
</scale> 

zoomout.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
android:fillAfter="true" > 
<scale 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="5000" 
    android:fromXScale="1.0" 
    android:fromYScale="1.0" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:toXScale="0.5" 
    android:toYScale="0.5" > 
</scale> 

Это моя деятельность с анимацией

public class MainActivity extends AppCompatActivity { 

public static final String TAG= "MainActivity"; 
Animation zoomin, zoomout; //declared as public 
private final int ANIM_HOLD_LENGTH = 2000; 
ImageView imageView; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    imageView= (ImageView) findViewById(R.id.imageView); 

    zoomin = AnimationUtils.loadAnimation(this, R.anim.zoomin); 
    zoomout = AnimationUtils.loadAnimation(this, R.anim.zoomout); 

    imageView.setAnimation(zoomin); 


    zoomin.setAnimationListener(new Animation.AnimationListener() { 

     @Override 
     public void onAnimationStart(Animation arg0) { 
      // TODO Auto-generated method stub 
      Log.d(TAG,"onAnimationStart--"); 
     } 

     @Override 
     public void onAnimationRepeat(Animation arg0) { 
      // TODO Auto-generated method stub 
      Log.d(TAG,"onAnimationRepeat--"); 

     } 

     @Override 
     public void onAnimationEnd(final Animation arg0) { 
      Log.d(TAG,"onAnimationEnd--"); 
      new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        Log.d(TAG,"onAnimationEnd-- run"); 
        imageView.startAnimation(zoomout); 

       } 
      }, ANIM_HOLD_LENGTH); 


     } 
    }); 

    zoomout.setAnimationListener(new Animation.AnimationListener() { 

     @Override 
     public void onAnimationStart(Animation arg0) { 
      Log.d(TAG,"zoomout onAnimationStart--"); 

      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onAnimationRepeat(Animation arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onAnimationEnd(Animation arg0) { 
      Log.d(TAG,"zoomout onAnimationEnd--"); 

      imageView.startAnimation(zoomin); 


     } 
    }); 
} 



} 

ответ

0

Вы можете добавить задержку, как этот

long delayTimeInMilliseconds = 1000; 

Handler handler = new Handler(); 

handler.postDelayed(new Runnable() 
{ 
    @Override 
    public void run() 
    { 
     // here you can start your reverse animation 
    } 
}, delayTimeInMilliseconds); 
+0

Спасибо за ваш ответ omer, я могу это сделать, но я не смог найти способ удержания и воспроизведения обратной анимации – kondal

+0

, вы можете создать еще один zoom_in_reverse.xml для обратной анимации и начать с onAnimationEnd zoom_in, добавив задержку – Omer

+0

Я сделал то же изображение, но изображение возвращается в нормальное место, а затем запускается, что zoom_in_reverse animation – kondal

0

Наконец ниже изменения в zoomout.xml помогли решить Issue

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fillAfter="true" > 
    <scale 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:duration="5000" 
     android:fromXScale="2" 
     android:fromYScale="2" 
     android:pivotX="50%" 
     android:pivotY="50%" 
     android:toXScale="1" 
     android:toYScale="1" > 
    </scale> 

</set> 
0

Существует гораздо более чистое и лучшее решение. Вместо того, чтобы расколоть анимации в 2-х различных файлов XML и с помощью анимации слушателей попробовать их слияние в один файл zoom.xml так:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
android:fillAfter="true" > 
<scale 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="5000" 
    android:fromXScale="1" 
    android:fromYScale="1" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:toXScale="2" 
    android:toYScale="2" /> 
<scale 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="5000" 
    android:startOffset="5500" 
    android:fromXScale="1.0" 
    android:fromYScale="1.0" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:toXScale="0.5" 
    android:toYScale="0.5" /> 
</set> 

Обратите внимание, что во второй шкале я добавил startOffset собственности. Это означает, что если вы хотите, чтобы вторая анимация начиналась сразу после первого, вы должны установить это свойство как длительность первой анимации (5000 мил). В нашем случае мы устанавливаем его как продолжительность первой анимации (5000 мил) + ваше смещение (500 мил). Затем просто напишите

imageView= (ImageView) findViewById(R.id.imageView); 
zoom = AnimationUtils.loadAnimation(this, R.anim.zoom); 
imageView.setAnimation(zoom); 

Выполнено!

+0

Спасибо Amish за подробный ответ, я попробую так и посмотреть, как это работает. – kondal

+0

Проверьте обновленный xml. Был избыточный режим повтора, который я не заметил. –

 Смежные вопросы

  • Нет связанных вопросов^_^