web-dev-qa-db-ja.com

ダウンロードしたGif画像をandroid

アプリからサーバーからGIF画像をダウンロードし、ImageViewで表示していますが、アニメーション化されていません。ダウンロードしたアニメーションGIF画像を再生する他の方法はありますか?前もって感謝します 。

17
neeraj

画像ビューの代わりに以下のカスタムビューを使用しています。

public class SampleView extends View {

    private Movie mMovie;
    private long mMovieStart;

    public SampleView(Context context) {
        super(context);
        setFocusable(true);

        Java.io.InputStream is;
        is = context.getResources().openRawResource(R.drawable.girl_dances);
        mMovie = Movie.decodeStream(is); 
    }

    public SampleView(Context context, AttributeSet attrSet) {
        super(context, attrSet);
        setFocusable(true);

        Java.io.InputStream is;
        is = context.getResources().openRawResource(R.drawable.girl_dances);
        mMovie = Movie.decodeStream(is);
    }

    public SampleView(Context context, AttributeSet attrSet, int defStyle) {
        super(context, attrSet, defStyle);
        setFocusable(true);

        Java.io.InputStream is;
        is = context.getResources().openRawResource(R.drawable.girl_dances);
        mMovie = Movie.decodeStream(is);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawColor(0x00000000);

        Paint p = new Paint();
        p.setAntiAlias(true);

        long now = Android.os.SystemClock.uptimeMillis();
        if (mMovieStart == 0) { // first time
            mMovieStart = now;
        }
        if (mMovie != null) {
            int dur = mMovie.duration();
            if (dur == 0) {
                dur = 1000;
            }
            int relTime = (int) ((now - mMovieStart) % dur);
            mMovie.setTime(relTime);
            mMovie.draw(canvas, getWidth() / 2 - mMovie.width() / 2,
                    getHeight() / 2 - mMovie.height() / 2);
            invalidate();
        }
    }
    }

XMLレイアウト:

<com.test.sample.SampleView
Android:id="@+id/gif_view"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
10

いくつかの調査の後、最良の(または最も簡単な)ソリューションはWebViewを使用することです:

例:

myAnimatedGif.gifファイルをアセットフォルダに配置します。

xml Webビューを作成します。

<WebView
    Android:id="@+id/myWebView"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"/>

次に、gifファイルをWebビューにロードします。

    WebView view = (WebView) findViewById(R.id.myWebView);
    view.loadUrl("file:///Android_asset/myAnimatedGif.gif");

楽しい !

他の解決策は、この種のライブラリを使用することです: https://github.com/koral--/Android-gif-drawable

3
Tobliug

これはWebViewで実現できます。これは私が使用するものです:

WebViewクラスを固定するカスタムLinearLayout

import Android.view.View;
import Android.webkit.WebView;
import Android.widget.LinearLayout;
import Android.widget.TextView;

public class Spinner extends LinearLayout{

    public Spinner(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        View.inflate(context, R.layout.spiner, this);
        WebView web = (WebView) findViewById(R.id.web);
        web.loadUrl("file:///Android_asset/booting.gif");
    }
    public void setText(String text){
        TextView t = (TextView) findViewById(R.id.txtloading);
        t.setText(text);
    }
    public void refresh(){
        WebView web = (WebView) findViewById(R.id.web);
        web.loadUrl("file:///Android_asset/booting.gif");       
    }
}

R.layout.Spinner XMLファイル:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:orientation="horizontal"
    Android:gravity="center|center_vertical"
    Android:padding="10dp">
    <WebView Android:id="@+id/web" 
        Android:layout_width="24dp"
        Android:layout_height="12dp"
        />

    <TextView
        Android:id="@+id/txtloading"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="Loading..."
        />

</LinearLayout>

次のように使用できます

Spinner spinner = new Spinner(this);
myContainer.addView(spinner);

スピナーで更新を呼び出して、画像を確実に再生できます。

spinner.refresh();

お役に立てば幸いです。

0
Oluwatumbi