Android显示Gif动图

原创 2016年06月01日 16:33:14
package org.media.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Movie;
import android.os.Handler;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

import java.io.IOException;
import java.io.InputStream;


public class DrawingGif extends SurfaceView implements SurfaceHolder.Callback{

    private final static String TAG = "DrawingGif";

    private int scale = 1;
    private String path;
    private SurfaceHolder mHolder;
    private Canvas canvas;
    private Movie movie;
    private Handler mHandler;

    public DrawingGif(Context context) {
        this(context,null);
    }

    public DrawingGif(Context context, AttributeSet attrs) {
        this(context,attrs,0);
    }

    public DrawingGif(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init(){
        Log.d(TAG,"init");
        mHolder = getHolder();
        mHolder.addCallback(this);
        mHandler = new Handler();
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        Log.d(TAG, "surfaceCreated");
        new Thread(mRunnable).start();
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        Log.d(TAG,"surfaceChanged");
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        Log.d(TAG,"surfaceDestroyed");
        mHandler.removeCallbacks(mRunnable);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        Log.d(TAG,"onMeasure,path:"+path);
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        if (!TextUtils.isEmpty(path)){
            try {
                InputStream ins = getContext().getAssets().open(path);
                movie = Movie.decodeStream(ins);
                int width = movie.width();
                int height = movie.height();
                setMeasuredDimension(width*scale,height*scale);
                //mHandler.post(mRunnable);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    private Runnable mRunnable = new Runnable() {
        @Override
        public void run() {
            if (!TextUtils.isEmpty(path)){
                canvas = mHolder.lockCanvas();
                canvas.save();
                canvas.drawColor(Color.WHITE);
                canvas.scale(scale, scale);
                movie.draw(canvas, 0, 0);
                movie.setTime((int) (System.currentTimeMillis() % movie.duration()));
                canvas.restore();
                mHolder.unlockCanvasAndPost(canvas);
                mHandler.postDelayed(mRunnable, 50);
            }
        }
    };

    public int getScale() {
        return scale;
    }

    public void setScale(int scale) {
        this.scale = scale;
        invalidate();
    }

    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
        invalidate();
    }
}

使用:
gif = (DrawingGif) findViewById(R.id.gif);
        gif.setPath("2.gif");//asset路径
        gif.setScale(5);

android gif动图播放

一,自定义MyGifView类 package com.incomrecycle.prms.rvm.gui.activity.view; import java.io.ByteArrayOu...

android 加载gif动图 自定义GifView

  • 2017年10月24日 16:07
  • 24.44MB
  • 下载

android 加载gif动图 自定义GifView

android 加载gif动图 自定义GifView

Android ImageView实现类似Gif动图的效果

已经过时的方法: android studio会报错: 错误行:imageView.setBackgroundResource(R.anim.framebyframe);   错误为:expected...
  • chenxu6
  • chenxu6
  • 2015年08月26日 19:09
  • 1786

Android中GIF动图的播放控制和监听详解

感恩原创:http://code.replays.net/201706/92898.html android下播放gif图片功能似乎并不常用,很多时候还是以展示静态图片为主,可能是由于gif图体积比...

android-pulltorefresh 下拉加载中使用gif动图

效果预览: xml布局

Android APP设计加载使用gif动图需要注意的一般性问题

Android APP设计加载使用gif动图需要注意的一般性问题 (1)gif图片尺寸大小问题。gif图片的尺寸通常不会太小,这些图片如果从网络加载将消耗手机用户更多的网路流量。若是流量付费...

Android显示GIF动态图

  • 2015年04月29日 11:03
  • 4.23MB
  • 下载

Android下载并显示GIF图

最近项目需要实现在线加载GIF图的功能,于是我在网上翻了一番,发现有个开源项目(android-gif-drawable)可以很好的支持GIF动态图的显示。而且它的底层解码使用C实现,极大的提高了解码...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android显示Gif动图
举报原因:
原因补充:

(最多只允许输入30个字)