Android:GIF、invalidate

简介:

仿照apiDemos的例子,com.example.android.apis.graphics.BitmapDecode,直接修改来用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
public  class  PlayGifActivity  extends  Activity
{
         
     @Override
     protected  void  onCreate(Bundle savedInstanceState)
     {
         super .onCreate(savedInstanceState);
         setContentView( new  SampleView( this ,R.drawable.animated_gif));
     }
         
     private  static  class  SampleView  extends  View
     {
             
         private  Movie mMovie;
         private  long  mMovieStart;
             
         // Set to false to use decodeByteArray
         private  static  final  boolean  DECODE_STREAM =  true ;
             
         private  static  byte [] streamToBytes(InputStream is)
         {
             ByteArrayOutputStream os =  new  ByteArrayOutputStream( 1024 );
             byte [] buffer =  new  byte [ 1024 ];
             int  len;
             try
             {
                 while  ((len = is.read(buffer)) >=  0 )
                 {
                     os.write(buffer,  0 , len);
                 }
             }
             catch  (java.io.IOException e)
             {
             }
             return  os.toByteArray();
         }
             
         public  SampleView(Context context, int  resID)
         {
             super (context);
             setFocusable( true );
                 
             java.io.InputStream is;
             is = context.getResources().openRawResource(resID);
             if  (DECODE_STREAM)
             {
                 mMovie = Movie.decodeStream(is);
             }
             else
             {
                 byte [] array = streamToBytes(is);
                 mMovie = Movie.decodeByteArray(array,  0 , array.length);
             }
         }
             
         @Override
         protected  void  onDraw(Canvas canvas)
         {
             canvas.drawColor( 0xFFCCCCCC );
                 
             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() - mMovie.width(), getHeight() - mMovie.height());
                 invalidate(); //重绘方法,调用下一帧
             }
         }
     }
}




本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1226163,如需转载请自行联系原作者
目录
相关文章
|
编解码 算法 Java
基于ffmpeg 编解码 GIF 【PC】【Android】
基于ffmpeg 编解码 GIF 【PC】【Android】
149 0
|
Android开发 数据格式 XML
Android项目实战(三十):Fresco加载gif图片并播放
原文:Android项目实战(三十):Fresco加载gif图片并播放 前言: 项目中图文混合使用的太多太多了,但是绝大部分都是静态图片。 然而项目开发中有这么一个需求:显示一个出一个简短的动画(一般都不超过3秒)演示 比如说:一个功能提供很多步骤来教用户做广播体操,那么第一步就显示一个3秒钟的动作图,第二步显示一个几秒钟的动作图。
1634 0
|
Android开发 编解码 开发工具
Android 录制gif图
录制gif图思路: 把App操作过程录制成视频 根据视频转换成Gif 方法一:使用adb命令 在Android sdk下面有一些很有用的工具,adb位于platform-tools文件夹,开发者用它在设备上安装启动应用。
990 0
|
Android开发 数据格式 XML
|
Android开发 前端开发 数据格式
|
Android开发
最新Android Glide4.0加载Gif图片到ImageView
最新Android Glide4.0加载Gif图片到ImageView 在我过去的文章里面,介绍了旧的Glide 3.0+的加载Gif图片方式(见文章:http://blog.csdn.net/zhangphil/article/details/45561983 ),现在Glide 4.0相较于Glide 3.0+发生了很大变化,现在给出一个新版Glide 4.0加载Gif图片的代码例子。
2514 0
|
Android开发 UED 存储
Android APP设计加载使用gif动图需要注意的一般性问题
Android APP设计加载使用gif动图需要注意的一般性问题 (1)gif图片尺寸大小问题。gif图片的尺寸通常不会太小,这些图片如果从网络加载将消耗手机用户更多的网路流量。
1185 0
|
Java 大数据 Android开发
Android加载Gif和ImageView的通用解决方案:android-gif-drawable:GifTextView(2)
Android加载Gif和ImageView的通用解决方案:android-gif-drawable:GifTextView(2) 附录文章1简介了如何在Android中使用android-gif-drawable解决gif加载的问题。
1242 0