Android中加载Gif动画

源码 2024-9-30 13:39:07 110 0 来自 中国
Gif动画,我使用了三种方式

1.自界说控件加载gif动画

①.起首自界说一个GifView,用于体现Gif图片,具体代码如下:
public class GifView extends View {    private Resources resources;    private Movie mMovie;    private long mMovieStart;    private float ratioWidth;    private float ratioHeight;    public GifView(Context context) {        this(context,null);    }     public GifView(Context context, @Nullable AttributeSet attrs) {        this(context, attrs,0);    }     public GifView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {            setLayerType(View.LAYER_TYPE_SOFTWARE, null);        }        resources = context.getResources();        TypedArray ta = context.obtainStyledAttributes(attrs,R.styleable.GifView);        int resourceId = ta.getResourceId(R.styleable.GifView_src, -1);        setGifResource(resourceId);        ta.recycle();    }     public void setGifResource(int resourceId) {        if (resourceId==-1){            return;        }        InputStream is = resources.openRawResource(resourceId);        mMovie = Movie.decodeStream(is);        requestLayout();    }    public  void setGifStream(InputStream is){        mMovie = Movie.decodeStream(is);        requestLayout();    }     @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        if (mMovie!=null){            int w = mMovie.width();            int h = mMovie.height();            if (w<=0){                w=1;            }            if (h<=0){                h=1;            }            int pLeft = getPaddingLeft();            int pRight = getPaddingRight();            int pTop = getPaddingTop();            int pBottom = getPaddingBottom();            int widthSize;            int heightSize;            w+=pLeft+pRight;            h+=pTop+pBottom;            w=Math.max(w,getSuggestedMinimumWidth());            h=Math.max(h,getSuggestedMinimumHeight());            widthSize= resolveSizeAndState(w,widthMeasureSpec,0);            heightSize= resolveSizeAndState(h,heightMeasureSpec,0);            ratioWidth = (float) widthSize/w;            ratioHeight = (float) heightSize/h;            setMeasuredDimension(widthSize,heightSize);        }else{            super.onMeasure(widthMeasureSpec, heightMeasureSpec);        }    }     @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        long now = SystemClock.uptimeMillis();        if (mMovieStart ==0){ //第一次进入            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,0,0);            float scale=Math.min(ratioWidth,ratioHeight);            canvas.scale(scale,scale);            mMovie.draw(canvas,0,0);            invalidate();        }    }}②.在结构文件中添加自界说的控件,我这加了两个,第一个展示assets文件中的gif图片,一个展示drawable中的gif图片
<com.example.wen.adroid.view.GifView        android:id="@+id/gv_photo"        android:layout_width="match_parent"        android:layout_weight="1"        android:layout_gravity="center"        android:layout_height="0dp"       />    <com.example.wen.adroid.view.GifView        android:id="@+id/gv_local_photo"        android:layout_width="match_parent"        android:layout_weight="1"        android:layout_gravity="center"        android:layout_height="0dp"        app:src="@drawable/gifphoto"/>③.展示gif图片,具体代码如下:
         //方法一 使用自界说gifview播放gif图片        mGvLocalPhoto = (GifView) findViewById(R.id.gv_local_photo);        mGvPhoto = (GifView) findViewById(R.id.gv_photo);              try {            InputStream is = getAssets().open("assetphoto.gif");            mGvPhoto.setGifStream(is);        } catch (IOException e) {            e.printStackTrace();        }
2.使用Glide加载gif动画

Glide 所在: https://github.com/bumptech/glide
①.起首设置build.gradle
compile 'com.github.bumptech.glide:glide:3.7.0'②.设置好Glide之后,然后通过基本的用法去加载,加载代码如下:
// 使用Glide播放gif图片 mIvPhoto = (ImageView) findViewById(R.id.iv_photo); Glide.with(this)          .load(R.drawable.gifphoto)          .asGif()          .diskCacheStrategy(DiskCacheStrategy.SOURCE)          .into(mIvPhoto);注意:diskCacheStrategy是为其添加缓存计谋,此中缓存计谋可以为:Source及None,None及为不缓存,Source缓存原型。
3.使用android-gif-drawable加载gif动画

android-gif-drawable 所在:https://github.com/koral--/android-gif-drawable
①.起首设置build.gradle
compile 'pl.droidsonroids.gif:android-gif-drawable:1.2.7'②.在xml中添加GifImageView控件
<pl.droidsonroids.gif.GifImageView        android:id="@+id/giv_photo"        android:layout_width="match_parent"        android:layout_weight="1"        android:layout_height="0dp"        android:src="@drawable/gifphoto"        />③.调用android-gif-drawable
//使用android-gif-drawable 库        GifImageView mGifIvPhoto = (GifImageView) findViewById(R.id.giv_photo);        try {            //加载asset文件中的gif图片            GifDrawable gif = new GifDrawable(getAssets(), "assetphoto.gif");            mGifIvPhoto.setImageDrawable(gif);        } catch (IOException e) {            e.printStackTrace();        }
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-21 21:18, Processed in 0.125973 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表