Android播放聊天語音訊息幀動畫問題

CrackgmKey發表於2017-11-28

本文轉自http://blog.csdn.net/minyou_1314/article/details/25230165

專案中遇到的問題:

需求: 做一個聊天頁面,要求播放語音時,有一個類似於喇叭的動畫,從小到大不停迴圈,語音播放完,動畫停止在第一幀。當點選正在播放的語音時,語音停止,動畫回覆到第一幀(回覆到第一幀是難點)

實現:用Frame Animation  

可以在Java程式碼中新增每一幀的動畫,也可以建立動畫布局,我用的是建立動畫布局。

1.建立動畫布局,在drawable資料夾下建立佈局imv_anim_bg.xml(名字自己定義):

[html] view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <animation-list xmlns:android="http://schemas.android.com/apk/res/android"   
  3.     android:oneshot="false">  
  4.     <item android:drawable="@drawable/communicaiton_sound_self_03" android:duration="500"/>  
  5.     <item android:drawable="@drawable/communicaiton_sound_self_01" android:duration="500"/>  
  6.     <item android:drawable="@drawable/communicaiton_sound_self_02" android:duration="500"/>  
  7.     <item android:drawable="@drawable/communicaiton_sound_self_03" android:duration="500"/>  
  8. </animation-list>  

解釋一下:android:oneshot="false"     false:迴圈播放動畫,   true:  只播放一次

2.在佈局中新增ImageView控制元件,設定其背景為上述動畫。

3.在java程式碼中實現動畫的播放,停止,回覆第一幀:

     獲得動畫例項;     

[java] view plain copy
  1. anim = (AnimationDrawable) imv.getBackground();  // anim 為AnimationDrawable物件,imv為ImageView物件,就是要實現動畫效果的ImageView  
     獲取動畫例項後就可以實現動畫播放,停止等操作

     動畫播放:

[java] view plain copy
  1. anim.start();  
     動畫停止:

[java] view plain copy
  1. anim.stop();    // stop方法實際上只是動畫的暫停方法,當呼叫此方法時,動畫會停止到當前正在播放的那一幀,並不會停止到第一幀,當在此方法之後呼叫start()方法,會繼續下一幀播放  

    動畫恢復到第一幀動畫:

[java] view plain copy
  1. anim.selectDrawable(0);      //選擇當前動畫的第一幀,然後停止  
  2. anim.stop();      

討論:

動畫恢復到第一幀:

   在專案是現實時,剛開始用的方法是anim.setVisible(true,true);  檢視文件發現,setVisible方法的第二個引數是reset,因此設定其為true,目的是實現anim的重置,此方法可用,但是在之後的測試中發現在Lenovo等手機中,系統並不支援此方法。

在之後的調查中發現上述返回第一幀的方法,目前沒有發現不支援此方法的手機

相關文章