2013-08-14 20 views
11

Czy jest jakiś sposób, aby ciągle powiększać i pomniejszać ImageView w systemie Android. Próbowałem użyć poniższego kodu, ale działa tylko jedna z funkcji Zoom.Android ImageView Zoom-in i Zoom-out Ciągle

zoomin.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="20000" 
     android:fromXScale="1" 
     android:fromYScale="1" 
     android:pivotX="50%" 
     android:pivotY="50%" 
     android:toXScale="3" 
     android:toYScale="3" > 
    </scale> 

</set> 

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="20000" 
     android:fromXScale="1.0" 
     android:fromYScale="1.0" 
     android:pivotX="50%" 
     android:pivotY="50%" 
     android:toXScale="0.5" 
     android:toYScale="0.5" > 
    </scale> 

</set> 

I klasa Activity że mam:

Animation zoomin, zoomout; //declared as public 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    // animation 
    zoomin = AnimationUtils.loadAnimation(this, R.anim.zoomin); 
    zoomout = AnimationUtils.loadAnimation(this, R.anim.zoomout); 
    bgImage.setAnimation(zoomin); 
    bgImage.setAnimation(zoomout); 
    Thread t = new Thread(new Zoom()); 
    t.start(); 
} 
private class Zoom implements Runnable { 
    @Override 
    public void run() { 
     while (true) {    
      bgImage.startAnimation(zoomin); 
      try { 
       Thread.sleep(8000); 
      } catch (InterruptedException e) { 
            e.printStackTrace(); 
      }    
      bgImage.startAnimation(zoomout); 
     } 
    } 
} 

Oto animacja zoomin wydaje się być w porządku pracy. Czy istnieje sposób na ciągłą implementację animacji zoomin i zoomout?

Dzięki

Odpowiedz

15

użycie zamiast tego wątku

zoomin.setAnimationListener(new AnimationListener() { 

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

     } 

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

     } 

     @Override 
     public void onAnimationEnd(Animation arg0) { 
      bgImage.startAnimation(zoomout); 

     } 
    }); 

i

zoomout.setAnimationListener(new AnimationListener() { 

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

     } 

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

     } 

     @Override 
     public void onAnimationEnd(Animation arg0) { 
      bgImage.startAnimation(zoomin); 

     } 
    }); 
+1

niesamowite! Wielkie dzięki :)) (Y) – sree127

+3

Proponuję dodać android: repeatCount = "1" i android: repeatMode = "reverse" do skalowania w zoom i zoomout i działa bardzo pięknie :) – Arash

0

można użyć coś jak poniżej i jako Sanket wspomniano

Zommin.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="1.5" 
     android:toYScale="1.5" 
     > 
    </scale> 

</set> 

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.5" 
     android:fromYScale="1.5" 
     android:pivotX="50%" 
     android:pivotY="50%" 
     android:toXScale="1" 
     android:toYScale="1" > 
    </scale> 

</set> 

I kod:

zoomin.setAnimationListener(new Animation.AnimationListener() { 

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

      } 

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

      } 

      @Override 
      public void onAnimationEnd(Animation arg0) { 
       imageView.startAnimation(zoomout); 

      } 
     });