2013-01-18 148 views
1

我有一個默認圖像的圖像視圖。現在,當我嘗試點擊它時,我想讓它動畫顯示4幀圖像。我怎麼能做到這一點,我試圖更簡單的方法(更愚蠢的做法)通過更改imageresource 4次,如預期的圖像變化太快,動畫圖像效果不可見。有任何想法嗎?在圖像視圖中創建動畫

我嘗試這樣的做法:

Gem = (ImageView)v; 
    Gem.setImageResource(com.example.gems.R.drawable.bd1); 
    Gem.postDelayed(new Runnable() { 
     public void run() { 
      Gem.setImageResource(com.example.gems.R.drawable.bd2); 
      Gem.postDelayed(new Runnable() { 
       public void run() { 
        Gem.setImageResource(com.example.gems.R.drawable.bd3); 
        Gem.postDelayed(new Runnable() { 
         public void run() { 
          Gem.setImageResource(com.example.gems.R.drawable.bd4); 
          Gem.postDelayed(new Runnable() { 
           public void run() { 
           } 
          }, 500); 
         } 
        }, 500); 
       } 
      }, 500); 
     } 
    }, 500); 

它的工作,但有一個更好的方式來此無需編碼太多線?我有25種圖像,每個圖像有4幀。

編輯:

我使用XML轉換文件的嘗試:

的Java文件:

Resources res = this.getResources(); 
    Gem = (ImageView)v; 
    TransitionDrawable transition; 

    transition = (TransitionDrawable) 
      res.getDrawable(R.drawable.blue_diamond_animation); 
    Gem.setImageDrawable(transition); 
    transition.startTransition(3000); 

XML文件:

<transition xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/bd1"></item> 
    <item android:drawable="@drawable/bd2"></item> 
    <item android:drawable="@drawable/bd3"></item> 
    <item android:drawable="@drawable/bd4"></item> 
    <item android:drawable="@drawable/invi"></item> 
</transition> 

這似乎是工作,但我不」不想在轉換中繪製這些圖像。我想改變過渡的背景。我試過將android:drawable更改爲android:drawable,但它不起作用。

回答

1

事實證明,有這個確切類:AnimationDrawable

基本上,只需添加幀與其他照片在動畫中使用的AnimationDrawable對象,並指定其顯示多長時間使用addFrame(Drawable frame, int duration)

然後設置ImageView顯示任何IMA GE應該開始和設置使用setBackgroundDrawable(Animation)

最後的背景,AnimationDrawable你剛纔提出,啓動動畫在onClick聽衆

編輯:例如

AnimationDrawable ad = new AnimationDrawable(); 
ad.addFrame(getResources().getDrawable(R.drawable.image1), 100); 
ad.addFrame(getResources().getDrawable(R.drawable.image2), 500); 
ad.addFrame(getResources().getDrawable(R.drawable.image3), 300); 

ImageView iv = (ImageView) findViewById(R.id.img); 
iv.setBackgroundDrawable(animation); 

然後在你的onClick監聽器,只需撥打ad.start

+0

你能給這個例子代碼或僞代碼嗎?我不太明白。 – ljpv14

+0

我用動畫繪製,使其工作。我怎樣才能停止動畫?我的意思是我只想讓它顯示5幀,然後停在最後一幀。 – ljpv14

+0

你應該使用'ad.setOneShot(true)'這個方法,它應該使它只能播放一次。 –

0

這取決於你想完成什麼。你還沒有提供足夠的信息去看

viewproperty動畫師真的是最簡單的東西使用看看。它也可以與舊API的使用nineoldandroids罐子使用(谷歌它)

http://developer.android.com/reference/android/view/ViewPropertyAnimator.html

的ObjectAnimator和ValueAnimator也可提供類似並稍微更難實現

http://developer.android.com/reference/android/animation/ObjectAnimator.html 的http://開發商。 android.com/reference/android/animation/ValueAnimator.html

查看示例包中的APIdemos,有幾個主要使用ValueAnimator的示例。 http://developer.android.com/tools/samples/index.html

也有精靈要考慮,但它基本上是一個位圖,您可以將用戶的計時器obect舞蹈設計

+0

我嘗試使用過渡xml。它工作,但我想在轉換中更改背景圖像,而不是在我現有的視圖之上繪製。有任何想法嗎? – ljpv14