今天我们研究一下怎样在Android手机上显示GIF动态图片

首先须要在src文件夹下新建一个自己定义的View。代码例如以下:

</pre><pre name="code" class="java">
</pre><pre name="code" class="java">
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Movie;
import android.util.AttributeSet;
import android.view.View; public class MyGifView extends View { //表示開始播放gif图片的绝对时间
private long movieStart = 0;
//movie对象管理gif图片里面的多个帧
private Movie movie; public MyGifView(Context context, AttributeSet attrs) {
super(context, attrs);
movie = Movie.decodeStream(context.getResources().openRawResource(
R.drawable.horse));
} @Override
protected void onDraw(Canvas canvas) {
long currentTime = System.currentTimeMillis();
// 第一次播放
if (movieStart == 0) {
movieStart = currentTime;
} //循环播放
if (movie != null) {
int duration = movie.duration();
int relTime = (int) ((currentTime - movieStart) % duration);
movie.setTime(relTime);
movie.draw(canvas, 0, 0);
// 强制重绘
invalidate();
} //假设仅仅想播放一次,仅仅需推断currentTime-movieStart的值大于duration就不重绘就可以 super.onDraw(canvas);
}
}

接着写一个Activity,用来显示gif图片:

import android.app.Activity;
import android.os.Bundle; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}

XML布局文件是:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" > <com.example.gifdemo.MyGifView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="20dp" /> </RelativeLayout>

效果图例如以下:

整个演示样例project文件下载链接:

Android显示GIF图片

Android显示GIF图片的更多相关文章

  1. Xamarin.Android 入门之:Bind java的jar文件+Android显示gif图片

    一.引言 在xamarin开发的时候,有时我们想要做一个功能,但是这个功能已经有人用java写好了,并且打包成了jar文件.那么我们可以直接把对方的jar文件拿过来用而不是重新用c#写代码. 关于bi ...

  2. android 显示gif图片

    在android中不支持gif格式的图片,但是由于我希望在我的程序中刚刚加载的时候有一个小人在跑步表示正在加载.而这个小人跑就是一个gif图片.也就是希望程序一启动时就加载gif图片.在网上查找了一些 ...

  3. Mono for Android 显示远程图片

    Main.axml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:an ...

  4. Android 显示大图片

    主要的代码如下: BitmapFactory.Options options = new BitmapFactory.Options(); //图片解析配置 options.inJustDecodeB ...

  5. Android显示相册图片和相机拍照

    首先看最重要的MainActive类: public class MainActivity extends AppCompatActivity { private final int FROM_ALB ...

  6. android 显示internet 图片

    try { HttpGet httpRequest = new HttpGet(edtUrl.getText() .toString()); HttpClient httpclient = new D ...

  7. Android ImageView显示本地图片

    Android ImageView 显示本地图片 布局文件 <?xml version="1.0" encoding="utf-8"?> <R ...

  8. Android 使用ContentProvider扫描手机中的图片,仿微信显示本地图片效果

    版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/1873 ...

  9. app开发历程——android手机显示服务器端图片思路

    以前自己都不知道怎么去显示服务器端的图片,还好在apkbus论坛上找到一个特别简单的例子.虽然一天天忙忙碌碌,但是自己内心其实有一种想逃的心里,说不定哪天就会冒出来. 1.首先服务器端图片 这里的Im ...

随机推荐

  1. 常见LINQ语句学习

    1.读取20条最新留言 public ActionResult Index() { var mostRecentEntries = (from entry in _db.Entries orderby ...

  2. 简要解析XMPP框架及iOS-Objective-C的使用

    前言:这两天看了XMPP框架,查阅了一些资料,写下这篇文章记录一下学习笔记 一.简要解析XMPP核心部分 XMPP框架分为两个部分 1.核心部分 2.扩展部分 扩展部分主要讲好友列表(roster). ...

  3. 转:onConfigurationChanged的作用

    API原文说明:android:configChangesLists configuration changes that the activity will handle itself. When ...

  4. 求 n! (大数问题)----------HDOJ1042

    以下只YY算法,c++实现,java大神绕道..... (1)位数的估计     显然对于大数(比如1000的阶乘)的阶乘我们找不到一个数据类型存放这个数,是在太大啦....     那么现在来估计一 ...

  5. jQuery 删除HTML元�

    jQuery使用以下两个方法来删除或是清空某个HTML元素. remove() – 删除指定的元素(包含其子元素) empty() – 清空指定元素的子元素 比如: <!DOCTYPE html ...

  6. cocos2dx-lua捕获用户touch事件的几种方式

    这里仅仅针对lua 1.为每一个关心的事件注冊回调函数 详细分为下面几种 1>单点触摸 注冊函数为 cc.Handler.EVENT_TOUCH_BEGAN      = 40 cc.Handl ...

  7. Java基础11 对象引用

    链接地址:http://www.cnblogs.com/vamei/archive/2013/04/01/2992484.html 作者:Vamei 出处:http://www.cnblogs.com ...

  8. 复合文档的二进制存储格式研究[ole存储结构](word,xls,ppt...)[转]

    复合文档文件格式研究   前 言 复合文档(Compound Document) 是一种不仅包含文本而且包括图形.电子表格数据.声音.视频图象以及其它信息的文档.可以把复合文档想象成一个所有者,它装着 ...

  9. boost ini

    #include <boost/property_tree/ptree.hpp>#include <boost/property_tree/ini_parser.hpp> .. ...

  10. graph driver-device mapper-04libdevmapper基本操作

    // 创建thin pool // 调用路径:NewDeviceSet->initDevmapper->createPool 1.1 func createPool(poolName st ...