1.自定义GIF
【gif使用的场景】在社交类的app上居多;一般继承的父类就是下面所列的几种;
1.1 加载本地的gif图片的播放
【专门监听生命周期】需要使用到SurfaceView控件;
【获取外界的gif资源】获得到的i资源不能直接播放,需要使用使用线程播放;
【播放】需要使用线程播放
1 public class MyGifView extends SurfaceView implements SurfaceHolder.Callback { 2 3 private Movie movie; 4 //默认缩放倍数 5 private float gifScale = 2.5f; 6 //第二步:通过线程进行播放---专门用来播放Gif图片 7 private Handler handler = new Handler(); 8 9 private Runnable runnable = new Runnable() { 10 @Override 11 public void run() { 12 //循环播放每一帧 13 //获取加锁画布 14 Canvas lockCanvas = getHolder().lockCanvas(); 15 //保持画布状态 16 lockCanvas.save(); 17 lockCanvas.scale(gifScale,gifScale); 18 //绘制图片 19 movie.draw(lockCanvas,0,0); 20 //切换每一帧 21 //例如:我现在有5张图片 22 //时间: 1 2 3 4 5 6 7 8 9 10 23 //计算:1%5 24 //图片: 1 2 3 4 0 1 2 3 4 0 ......以此类推 25 movie.setTime((int) (System.currentTimeMillis() % movie.duration())); 26 //还原画布 27 lockCanvas.restore(); 28 //解锁画布 29 getHolder().unlockCanvasAndPost(lockCanvas); 30 //每个多少秒切换一次图片 31 handler.postDelayed(runnable,50); 32 } 33 };
【添加控件】自定义控件
【设置surfaceView的宽高】
【对gif进行缩放】
1.2 加载网络图片
【使用网络下载的图片】--没有搞成功
2.使用第三方的库
【说明】一帧一帧的绘制,不停的调用invalidateView();
3.第三方视频框架使用
【github地址】VideoPlayerManager
【源码分析】