android实现gif动态图的使用
2024-10-03 13:27:43
在android中显示一个静态图片比如png jpg等等都很方便,但是如果要显示一个gif 动态图片就需要进行一些处理。
本文是采用自定义view 然后进行重新onDraw方法来实现
首先自定义View【MyGifView.java】
[java] view plaincopy
/**
* MyGifView.java
* Copyright(C) 2014
* creator:cuiran 2014-5-16 下午2:01:56
*/
package com.cayden.videodemo.view;
import com.cayden.videodemo.R;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Movie;
import android.util.AttributeSet;
import android.view.View;
/**
* 自定义View 播放gif动画
* @author cuiran
* @version 1.0.0
*/
public class MyGifView extends View {
private long movieStart;
private Movie movie=Movie.decodeStream(getResources().openRawResource(R.drawable.football));
private MyGifView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
// TODO Auto-generated constructor stub
}
private MyGifView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public MyGifView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
/* (non-Javadoc)
* @see android.view.View#onDraw(android.graphics.Canvas)
*/
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
long curTime=android.os.SystemClock.uptimeMillis();
//第一次播放
if (movieStart == 0) {
movieStart = curTime;
}
if (movie != null) {
int duraction = movie.duration();
int relTime = (int) ((curTime-movieStart)%duraction);
movie.setTime(relTime);
movie.draw(canvas, 0, 0);
//强制重绘
invalidate();
}
super.onDraw(canvas);
}
}
然后写Activity
[java] view plaincopy
/**
* GifMainActivity.java
* Copyright(C) 2014
* creator:cuiran 2014-5-16 下午2:10:29
*/
package com.cayden.videodemo;
import com.cayden.videodemo.view.MyGifView;
import android.app.Activity;
import android.os.Bundle;
/**
* TODO
* @author cuiran
* @version 1.0.0
*/
public class GifMainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//第一种 直接使用代码
MyGifView gifView=new MyGifView(getApplicationContext());
setContentView(gifView);
//第二种采用xml 貌似出错了?????
// setContentView(R.layout.gif_main);
}
}
本来还可以使用布局xml的但是报错了
[java] view plaincopy
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:text="====Gif图片测试布局===="
android:layout_height="wrap_content"
android:layout_width="wrap_content"
/>
<com.cayden.videodemo.view.MyGifView
android:id="@+id/iv"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_margin="20dp"
/>
</LinearLayout>
最新文章
- Nginx反向代理的工作方式
- apache2.2 做后端,增加真实ip到日志中
- SSIS变量属性中EvaluateAsExpression设置的作用
- #!/usr/bin/env python与#!/usr/bin/python的区别
- Linux解决Device eth0 does not seem to be present
- 【分享】Maven插件的源码下载(SVN)
- Oracle基础<;4>;--程序包
- BNUOJ-26579 Bread Sorting YY
- 关于laravel框架的Auth::attempt验证失败
- 使用Qt编写服务器端程序(包括Http传输服务器端)的方法
- NVIDIA+关联2015写学校招收评论(嵌入式方向,上海)
- IOS SDK相机的详细解释/画廊(默认+他们的高清摄像头接口)
- CSS实现导航条Tab切换的三种方法
- weblogic java.lang.OutOfMemoryError: PermGen space 问题解决方法
- 微信小程序左滑删除功能
- Vector与ArrayList区别
- Makefile工程管理器及万能模板
- Java 中初始化 List 集合的 6 种方式!
- 最小树形图——朱刘算法(Edmonds)
- stm32f7699遇到的犯二问题
热门文章
- Splay伸展树入门(单点操作,区间维护)附例题模板
- 进程间通信——XSI IPC之消息队列
- ACM pie
- Django 跨域请求处理
- Winform DevExpress控件库(一) DevExpress控件库的安装与新建第一个DevExpress项目
- Bootstrap3 栅格系统-栅格参数
- 20160221.CCPP体系详解(0031天)
- Compass实战 站内搜索
- 【我的书】Unity Shader的书 — 目录(2016.5.19最后一次更新)
- 错误问题:OpenGL version to old,GLViewinitWithRect(const stdbasic_stringchar,stdchar_traitschar,stdalloca