看了網上一大堆資料,整理了一下在Android中顯示gif圖片,主要有幾種方法:
第一種方法:先將gif圖片分拆爲N幀(由美工/軟件完成或者手動截圖),儘量保持每一次圖片大小一致,然後逐次播放,建議動作不是很多的可以使用;
首先,寫一個用作動畫的XML文件,用來設置由幀組成的動畫,android:oneshot 表示是否循環一次,android:duration 表示每一幀的時間間隔毫秒。
<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
<item android:drawable="@drawable/a" android:duration="350" />
<item android:drawable="@drawable/b" android:duration="350" />
</animation-list></span>
然後,在你的當前的Activity的XML中,添加對一個ImageView,我們用它來顯示我們的動畫,這裏我們可以使用android:scaleType 這個屬性設置縮放圖片大小。
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/log"
android:contentDescription="@string/hello_world" />
最後,我們在JAVA代碼中把他們兩個XML聯繫起來,
ImageView imageView = (ImageView)findViewById(R.id.log); 表示在這個Activity的圖片顯示,
imageView.setBackgroundResource(R.layout.kaijidonghua); 表示使用的包含幀動畫的XML文件作背景圖片,
animationDrawable.start(); 利用這個方法啓動動畫,就可以看到效果了。
ImageView imageView = (ImageView)findViewById(R.id.log);
imageView.setBackgroundResource(R.layout.kaijidonghua);
final AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getBackground();
imageView.getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() {
@Override
public boolean onPreDraw() {
// TODO 自動生成的方法存根
animationDrawable.start();
return true;
}
});
第二種,直接使用Gif動畫,這是我在網上找的的一個有趣的方法,相對於第一種更簡單,不過縮放效果不好,不建議作背景圖片。
首先在需要顯示動畫的XML頁面中,添加一個Webview 控件,用來顯示Gif動畫。
<WebView
android:id="@+id/runWebView"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
然後,在JAVA文件中,添加引用Gif動畫,我把Gif圖片放在assents文件夾下面,這樣我們就可以看到動畫的顯示效果了。
WebView runWebView=null;
runWebView = (WebView) findViewById(R.id.runWebView);
runWebView.loadDataWithBaseURL(null,"<HTML><body bgcolor='#f3f3f3'><div align=center><IMG src='file:///android_asset/run.gif'/></div></body></html>", "text/html", "UTF-8",null);
相對於第一種,我們可以發現這中Gif圖片的大小,不能修改以及自動縮放,我們添加如下代碼,就可以修改初始大小,雙擊縮放大小了。
//縮放開關
webView.getSettings().setSupportZoom(true);
設置此屬性,僅支持雙擊縮放,不支持觸摸縮放(在android4.0是這樣,其他平臺沒試過)
// 設置是否可縮放
webView.getSettings().setBuiltInZoomControls(true);
如果設置了此屬性,那麼webView.getSettings().setSupportZoom(true);也默認設置爲true
2、無限縮放
無限縮放,就需要使用大視圖模式,如下:
//無限縮放
webView.getSettings().setUseWideViewPort(true);設置此屬性,可任意比例縮放。
注:1、初始縮放值可這樣設置:webView.setInitialScale(initalValue);
initalValue 初始爲100%
2、縮放後,要使內容適配屏幕,不超出屏幕外顯示,實現換行。這方面效果應該由html控制,而不是webview控制。例如<p style="word-break:break-all">test</p>實現自動換行。
由於目前我只用到了這幾種方法,當然還有一些更多的方法可以加載Gif圖片,只不過自己沒有親身試過,以後學習了再更新吧。