在android中处理gif图像

时间:2011-10-23 18:41:15

标签: android

在我的Android应用程序中,我正在使用电影来显示gif,但我面临的问题是,如果我接收带有扩展名.gif的图像,只有一帧图像,则显示空白屏幕。
请告诉我在android中显示gif的更好方法。
我正在使用的代码是

public MYGIFView(Context context, InputStream is, int i, int j,int screenWidth,int screenHeight) {
    super(context);

    //is=context.getResources().openRawResource(red);
    movie=Movie.decodeStream(is);
    xcoordinate = i;
    ycoordinate = j;
    viewWidth = screenWidth;
    viewHeight = screenHeight;


    setLayoutParams(new LayoutParams(viewWidth,viewHeight));

}

@Override
protected void onDraw(Canvas canvas) {
    if(movie != null) {
        long now = android.os.SystemClock.uptimeMillis();
        int dur = Math.max(movie.duration(), 1); // is it really animated?
        int pos = (int)(now % dur);
        movie.setTime(pos);
        movie.draw(canvas,xcoordinate, ycoordinate);
    }

3 个答案:

答案 0 :(得分:0)

API demos itself provides a solution

我认为你缺少的是触发这部电影。

这样做:

Handler handler = new Handler();
new Thread() {
    @Override public void run() {
        // ... setup the movie (using the code from above)
        // ... create and display the custom view, passing the movie

        while(!Thread.currentThread().isInterrupted()) {
            handler.post(new Runnable() {
                public void run(){
                    view.invalidate();
                }
            });
            try {
                Thread.sleep(50); // yields 20 fps
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        }
    }
}.start();

或者如API演示所示,使onDraw()事件本身中的视图无效,导致重绘,直到电影的持续时间结束。

答案 1 :(得分:0)

我试过这样的工作gif文件在android中运行。

<强> MainActivity.java

    package com.example.gifview;
import android.os.Bundle;
import android.app.Activity;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        GifWebView view = new GifWebView(this, "file:///android_asset/earth.gif");
        setContentView(view);
    }



}

<强> GifWebView.java

package com.example.gifview;

import android.content.Context;
import android.webkit.WebView;

public class GifWebView extends WebView {

    public GifWebView(Context context, String path) {
        // TODO Auto-generated constructor stub
        super(context);
        loadUrl(path);
    }

}

注意:无需在activity_main.xml

中进行编辑

答案 2 :(得分:0)

您无法直接将.GIF图片加载到Android。

您可以通过ImageSwitcher或其他替代方法欺骗它。 请参阅此链接,Adding gif image in an ImageView in android