android gif图片闪烁,Android中动态显示gif图片
android所带的控件里面没有能够显示gif图片的
网上的解决方法大致有三种
第一:先将gif图片分拆为N帧(由美工/软件完成),然后逐次播放;
第二:利用java代码将图片分拆为N帧;
第三:android里面有一个Movie类,可以使用它来播放gif动画(此类位于android.graphics包下)
前面两种的思路是一样的,第二种网上有jar包可以下载用(在资源中已经上传)。
第一种对于帧数较多的图片太过于繁琐,不提倡使用。
先来解释一下第二种的方法:
GifAction.java 观察者类,监视GIF是否加载成功
GifFrame.java 里面三个成员:当前图片、延时、下张Frame的链接。
GifDecoder.java 解码线程类
GifView.java 主类,包括常用方法,如GifView构造方法、设置图片源、延迟、绘制等。
public interface GifAction {
/**
* gif解码观察者
* @param parseStatus 解码是否成功,成功会为true
* @param frameIndex 当前解码的第几帧,当全部解码成功后,这里为-1
*/
public void parseOk(boolean parseStatus,int frameIndex);
}
//线程操作gif图片解码
public class GifDecoder extends Thread
//gif框架
public class GifFrame
{
/**
* 构造函数
*
* @param im
* 图片
* @param del
* 延时
*/
public GifFrame(Bitmap im, int del)
{
image = im;
delay = del;
}
/** 图片 */
public Bitmap image;
/** 延时 */
public int delay;
/** 下一帧 */
public GifFrame nextFrame = null;
}
/**
* GifView
* 本类可以显示一个gif动画,其使用方法和android的其它view(如imageview)一样。
* 如果要显示的gif太大,会出现OOM的问题。
*
* @author liao
*
*/
public class GifView extends View implements GifAction
应用如下:
1-把GifView.jar加入你的项目。
2-在xml中配置GifView的基本属性,GifView继承自View类,和Button、ImageView一样是一个UI控件。如:
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:paddingTop="4px" android:paddingLeft="14px" android:enabled="false" />
3-在代码中配置常用属性:
// 从xml中得到GifView的句柄
gf1 = (GifView) findViewById(R.id.gif1);
// 设置Gif图片源
gf1.setGifImage(R.drawable.gif1);
// 添加监听器
gf1.setOnClickListener(this);
// 设置显示的大小,拉伸或者压缩
gf1.setShowDimension(300, 300);
// 设置加载方式:先加载后显示、边加载边显示、只显示第一帧再显示
gf1.setGifImageType(GifImageType.COVER);
然后分析下第三种方法:
,为了显示gif图片,我们需要用到Movie类和自定义控件(包括自定义属性)
首先,我们来自定义控件属性:
在res/values里面建立xml文件,习惯性命名为attrs.xml(可以命名为其他名字)
在attrs.xml里面增加属性如下:
这里我只增加了一个属性,就是设置src文件。
属性设置好了,那怎么将这个src属性与java代码对应起来呢,这个就需要到构造函数里面处理了
public GifView(Context context, AttributeSet attrs){
super(context, attrs);
TypedArray ta = context.obtainStyledAttributes(attrs,
R.styleable.GifView); //这里用到了attrs.xml里面定义的GifView
int taCount = ta.length(); //获得属性的个数
for (int i=0;i
if (R.styleable.GifView_src == ta.getIndex(i)) {
int id = ta.getResourceId(R.styleable.GifView_src, 0); //这里的参数是前面的GifView + _ + src链接起来
if (0 != id) {
setSrc(id); //对应的函数,即在xml里面设置了src,相应的处理就会在setSrc函数里面进行
}
}
}
ta.recycle();
}
下面是setSrc函数:
public void setSrc(int id){
gifMovie = Movie.decodeStream(getResources().openRawResource(id)); //gifMovie为Movie类型
}
接下来是view的onDraw函数,这也是绘画动画的关键
public void onDraw(Canvas canvas){
long now = android.os.SystemClock.uptimeMillis(); //获得当前时间
if (lStartTime == 0) { // first time
lStartTime = now;
}
if (gifMovie != null) {
int dur = gifMovie.duration(); //获得gif文件的动画周期
if (dur == 0) {
dur = 1000;
}
int relTime = (int)((now - lStartTime) % dur);
gifMovie.setTime(relTime); //设置播放时间点
gifMovie.draw(canvas, getWidth() - gifMovie.width(), //播放(即绘画)
getHeight() - gifMovie.height());
invalidate();
}
}
下面在main.xml文件里面加入自定义的GifView控件
xmlns:gif="http://schemas.android.com/apk/res/com.gif.demo"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
gif:src="@drawable/lion"
/>
其中xmlns:gif="http://schemas.android.com/apk/res/com.gif.demo"
即gif为自己定义的namespace,com.gif.demo对应于自己的包名,即activity对应的包名
最后在activity里面setContentView(R.layout.main)就ok了
android gif图片闪烁,Android中动态显示gif图片相关推荐
- python label显示图片_python 实现在tkinter中动态显示label图片的方法
在编程中我们往往会希望能够实现这样的操作:点击Button,选择了图片,然后在窗口中的Label处显示选到的图片.那么这时候就需要如下代码: from tkinter import * from tk ...
- Android 在已有工程中实现微信图片压缩
这个我们需要自己去编译,但是已经有人帮我们编译好了,压缩算法也已经实现,因此,我们去下载然后编译即可:https://github.com/bither/bither-android-lib 首先将上 ...
- Android:TextView与EditText中插入表情图片
表情工具类,用于在TextView与EditText中插入表情图片: public class FaceUtil {public int[] faceIds;public String[] faceC ...
- android设置光标闪烁,Android EditText闪烁光标
我的Activity中只有一个EditText,我希望它在输入完成后隐藏闪烁的光标 – 焦点切换或用户按下Done – 换句话说,当输入键盘消失时. 这是EditText的代码. android:la ...
- java怎么将加载图片消除_Java中加载图片的方法
Java中添加图片,我知道有两种方法 用new ImageIcon("地址")函数,将图片放到JLabel中,然后把JLabel放到需要的地方就可以了 ImageIcon bg=n ...
- java web工程中如何添加图片_java web中如何添加图片
java web中如何添加图片 对于java可视化界面插入背景图片只需要background-image:url(图片路径)就行,而对于web项目中,并非如此 效果如下: 我们就需要在jsp页面中写J ...
- 【Unity教程】如何动态更换精灵图片在图集中更换精灵图片
参考文章:1.unity3d 更换sprite renderer中sprite的图片 2.制作精灵(UI Sprite) 3.Unity2D动态设置SpriteRender的Sprite(Multip ...
- element表格里面放图片_elementUI 表格中预览图片
表格中有一列显示的图片,现需要点击图片,预览该图片,使用的elementui中的previewSrcList做的图片预览, 但是测试发现,无论点击表格中的那张图片,预览的大图都是从第一张图片,开始预览 ...
- java实现本地图片转urljava中映射本地图片地址为url访问
1.编写一个工具类PhotoUtils实现WebMvcConfigurer,然后重写addResourceHandlers方法即可 @Component public class PhotoUtils ...
最新文章
- Domino R8.5相关链接
- tf_geometric的安装
- Earliest PEP Algorithm Principles
- 深入理解CSS盒模型 - 程序猿的程 - 博客园
- 设计模式是用来弥补面向对象编程缺陷的方法总结
- 向下一代互联网迈进 声网发布全链路加速FPA为互联网增加QoS保障
- Matlab线性/非线性规划优化算法(2)
- 程序员!别逼自己刷题了!每天花10分钟做这件事,编程能力暴增!
- Directx11教程(47) alpha blend(4)-雾的实现
- Anaconda出现Navigator Error的解决办法
- 好听无损的flac格式歌曲怎么转换成mp3格式的
- 百度云网页视频加速播放
- su室内插件_草图大师做室内需要用到那些插件
- 大学生对于繁体字的态度与认知情况调查
- 1075:字符串统计
- 点燃创业引擎的天使投资
- 江苏工勤计算机高级工职称,事业单位专业技术职称与工勤岗高级工的区别
- transferwise怎么提现_TransferWise来款能不能入账?快来Get这些注意事项
- 图像匹配—NCC算法,即归一化互相关匹配
- .NET报错:所生成项目的处理器框架“MSIL”与引用“xxx”的处理器架构“AMD64”不匹配