標籤:android gif imageview
最近項目需要實現線上載入GIF圖的功能,於是我在網上翻了一番,發現有個開源項目(android-gif-drawable)可以很好的支援GIF動態圖的顯示。而且它的底層解碼使用C實現,極大的提高瞭解碼效率,同時很大程度上避免了OOM現象出現。
這篇文章主要是展示如何使用該項目的Demo,以備不時之需。
布局檔案:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.testgif.MainActivity" > <pl.droidsonroids.gif.GifImageView android:id="@+id/myGifView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#ffffff" android:src="@drawable/ic_launcher" /></RelativeLayout>
Activity代碼:
package com.example.test;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import pl.droidsonroids.gif.GifDrawable;import pl.droidsonroids.gif.GifImageView;import android.app.Activity;import android.os.AsyncTask;import android.os.Bundle;import android.util.Log;import android.view.Menu;public class MainActivity extends Activity {protected static final String IMAGE_URL = "http://img.blog.csdn.net/20150410135837339";// protected static final String IMAGE_URL =// "http://img.blog.csdn.net/20150310123909933";protected static final String TAG = "MainActivity";private GifImageView myGifImageView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);myGifImageView = (GifImageView) findViewById(R.id.myGifView);new AsyncTask<Void, Void, GifDrawable>() {@Overrideprotected GifDrawable doInBackground(Void... params) {byte[] gifbyte = null;HttpURLConnection conn = null;try {URL url = new URL(IMAGE_URL);conn = (HttpURLConnection) url.openConnection();ByteArrayOutputStream out = new ByteArrayOutputStream();InputStream in = conn.getInputStream();if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {// 串連不成功Log.i(TAG, "串連不成功");return null;}byte[] buffer = new byte[1024];int len = 0;while ((len = in.read(buffer)) > 0) {out.write(buffer, 0, len);}gifbyte = out.toByteArray();} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {conn.disconnect();}// 寫入檔案/*FileOutputStream fos = null;try {File root = Environment.getExternalStorageDirectory();File myFile = new File(root, "test.gif");Log.v(TAG, myFile.getAbsolutePath());fos = new FileOutputStream(myFile);fos.write(gifbyte);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (fos != null) {try {fos.close();} catch (IOException e) {e.printStackTrace();}}}*/GifDrawable gifDrawable = null;try {gifDrawable = new GifDrawable(gifbyte);} catch (IOException e) {e.printStackTrace();}return gifDrawable;}protected void onPostExecute(GifDrawable drawable) {myGifImageView.setImageDrawable(drawable);};}.execute();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}}
PS:下載它的開源庫,好像需要翻牆,不方便的同學可以直接從Demo中拿。
Demo:https://github.com/mandmLeee/GifDemo
Android下載並顯示GIF圖