- 浏览: 627884 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (164)
- android(基础) (81)
- android(进阶) (2)
- android(底层) (7)
- android(面试) (0)
- android(多媒体) (1)
- android(组件学习) (4)
- android(网络相关) (0)
- android(动画) (1)
- android(数据库) (2)
- android(UI样式) (3)
- android(xml) (0)
- android(调试) (14)
- android(环境搭建) (7)
- android(api) (1)
- C++ (1)
- C (0)
- JavaSE (2)
- Objective-c (1)
- JavaScript (0)
- 设计模式 (0)
- eclipse (3)
- javaee (4)
- 其它 (5)
- linux (18)
- Oracle (1)
- mysql (1)
- 嵌入式linux (1)
- 版本控制工具 (3)
- web前端 (1)
- python (1)
最新评论
-
chungehenyy:
android颜色对应的xml配置值,颜色表 -
u011467537:
...
android中用Spannable在TextView中设置超链接、颜色、字体 -
SurpriseLee:
不能更赞了!
android颜色对应的xml配置值,颜色表 -
u012094586:
这个代码是不是不全呀,能不能提供完整版的给予参考呢?xiexi ...
Android VideoView如何播放RTSP的流 -
luechenying:
顶上天!!!!!!!!!!!!!!!!!!
android颜色对应的xml配置值,颜色表
Android 播放GIF之前就有过一篇文章是讲述如何使用GIF文件并播放
如果前面有了解过的朋友肯定知道这上面的做法比较麻烦,又要去分解图片,又要写各种麻烦的XML文件,有点郁闷,而且还带来的直接后果是一个比较多动作的GIF图片可能会将项目的体积变大,这点很多朋友都无法接受。不过这样的好处也显而易见,就是运行的速度会比你去解码的速度要快。
以下这种方法是需要解码,但是速度的话保证不了,可能开线程的时候没有处理好吧,以下面这张图片为例做解码播放:
首先,先编写一个GIF解码的帮助类,该类提供了几个操作GIF图片的方法,比如图片的初始化呀,切换图片呀,获得整个GIF的组合数量等等,由于代码量太多,这里就不列出来,后面会提供源码供大家参考,可于源码内找到该帮助类。
之后,编写一个用于可显示Gif 的组件,继承自View 并实现了Runable,代码如下:
基础功能实现后。可通过view.start()开启GIF的播放,或者view.stop()停止GIF的播放,代码如下:
显示效果:
源码见附件,gifPlayer.rar
转自:http://android.gbsou.com/2011/09/06/android-gif-image-decoding-and-playback/
如果前面有了解过的朋友肯定知道这上面的做法比较麻烦,又要去分解图片,又要写各种麻烦的XML文件,有点郁闷,而且还带来的直接后果是一个比较多动作的GIF图片可能会将项目的体积变大,这点很多朋友都无法接受。不过这样的好处也显而易见,就是运行的速度会比你去解码的速度要快。
以下这种方法是需要解码,但是速度的话保证不了,可能开线程的时候没有处理好吧,以下面这张图片为例做解码播放:
首先,先编写一个GIF解码的帮助类,该类提供了几个操作GIF图片的方法,比如图片的初始化呀,切换图片呀,获得整个GIF的组合数量等等,由于代码量太多,这里就不列出来,后面会提供源码供大家参考,可于源码内找到该帮助类。
之后,编写一个用于可显示Gif 的组件,继承自View 并实现了Runable,代码如下:
import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.util.AttributeSet; import android.view.View; public class TypegifView extends View implements Runnable { private GifOpenHelper gHelper; private boolean isStop = true; private int delta; private Bitmap bmp; private Paint paint; // construct - refer for java public TypegifView(Context context) { this(context, null); paint = new Paint(); } // construct - refer for xml public TypegifView(Context context, AttributeSet attrs) { super(context, attrs); // 添加属性 TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.gifView); int n = ta.getIndexCount(); for (int i = 0; i < n; i++) { int attr = ta.getIndex(i); switch (attr) { case R.styleable.gifView_src: int id = ta.getResourceId(R.styleable.gifView_src, 0); setSrc(id); break; case R.styleable.gifView_delay: int idelta = ta.getInteger(R.styleable.gifView_delay, 1); setDelta(idelta); break; case R.styleable.gifView_stop: boolean sp = ta.getBoolean(R.styleable.gifView_stop, false); if (!sp) { setStop(); } break; } } ta.recycle(); paint = new Paint(); } /** * 设置停止 * * @param stop */ public void setStop() { isStop = false; } /** * 设置启动 */ public void setStart() { isStop = true; Thread updateTimer = new Thread(this); updateTimer.start(); } /** * 通过下票设置第几张图片显示 * * @param id */ public void setSrc(int id) { gHelper = new GifOpenHelper(); gHelper.read(TypegifView.this.getResources().openRawResource(id)); // 得到第一张图片 bmp = gHelper.getImage(); } public void setDelta(int is) { delta = is; } // to meaure its Width & Height @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(measureWidth(widthMeasureSpec), measureHeight(heightMeasureSpec)); } private int measureWidth(int measureSpec) { return gHelper.getWidth(); } private int measureHeight(int measureSpec) { return gHelper.getHeigh(); } protected void onDraw(Canvas canvas) { canvas.drawBitmap(bmp, 0, 0, paint); bmp = gHelper.nextBitmap(); } public void run() { while (isStop) { try { this.postInvalidate(); Thread.sleep(gHelper.nextDelay() / delta); } catch (Exception ex) { ex.printStackTrace(); } } } }
基础功能实现后。可通过view.start()开启GIF的播放,或者view.stop()停止GIF的播放,代码如下:
setContentView(R.layout.main); Button btn = (Button) findViewById(R.id.Button01); Button btn2 = (Button) findViewById(R.id.Button02); final TypegifView view = (TypegifView) findViewById(R.id.gifView1); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { view.setStop(); } }); btn2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { view.setStart(); } });
显示效果:
源码见附件,gifPlayer.rar
转自:http://android.gbsou.com/2011/09/06/android-gif-image-decoding-and-playback/
发表评论
-
Fragment 横竖屏切换问题
2013-04-24 14:41 1877在默认情况下当发生横 ... -
Android EditText 增加自定义过滤
2012-02-19 22:20 2435在Android中,可以通过对EditText设置setFil ... -
解决android textview自动换行问题
2012-02-16 11:46 10811今天忽然发现android项目中的文字排版参差不齐的情况非常严 ... -
通过adb命令获取Android手机的IP地址
2011-12-30 19:11 4411要获取Android手机的IP地址,必须先保证你的Androi ... -
Android 图形用户界面 之 绘图(二) Paint类 主要方法介绍
2011-12-30 09:10 1482/** * Paint类介绍 * * Pa ... -
ListView底部分隔线的问题
2011-12-20 14:42 4339在工作中遇到了一个难题,就是一个listView在最下面的一个 ... -
android获取手机上的图片和视频缩略图thumbnails
2011-11-03 22:05 10085转贴自:http://www.android123.com.c ... -
Activity中使用AIDL让Service与Activity通信
2011-10-25 00:06 2812简易计算器,默认执行1+1的计算,点击go按钮执行计算,先看效 ... -
Android图形报表之AchartEngine(附开发包+API文档)
2011-10-22 16:49 11425统计报表: Java4Less (http://java4le ... -
android中用Spannable在TextView中设置超链接、颜色、字体
2011-10-21 23:08 50584昨晚研读 ApiDemo 源码至 com.example.an ... -
android动态设置TextView字体颜色
2011-10-21 11:50 6492最近写程序就遇到了这么个难题,在TextView 上,正常字体 ... -
layer-list和include的使用
2011-10-20 10:14 2424layer-list,include,merge使用,记录一下 ... -
自定义AlertDialog样式,根据屏幕大小来显示
2011-10-19 12:43 4642先介绍一些关于AlertDialog的基本知识: ... -
Android获取屏幕分辨率及DisplayMetrics简介
2011-10-19 08:56 2846Android 可设置为随着窗口大小调整缩放比例,但即便如此, ... -
android资源文件访问android.resource
2011-10-17 09:14 4230android.resource使用转自:http://www ... -
ImageView添加边框
2011-10-16 19:37 2130import android.content.Context; ... -
Android 实现TextView中文字链接的方式
2011-10-16 14:08 2538Android 的实现TextView中文字链接的方式有很多种 ... -
android实现TextView多行文本滚动
2011-10-16 13:38 6459Android中我们为了实现文本的滚动可以在ScrollVie ... -
ListView之setEmptyView的问题
2011-10-15 23:19 4988使用listView或者gridView时,当列表为空时,有时 ... -
去掉TabActivity底部默认白线
2011-10-15 16:38 3318经过一翻百度,google终于实现了TabActivity设置 ...
相关推荐
在Android应用开发中,有时我们需要在界面上展示动态GIF图像,这时`android-gif-drawable`库就显得非常实用。这个库是专门为在Android平台上高效、流畅地播放GIF动画而设计的。本文将深入探讨如何使用`android-gif-...
在Android中,处理这种格式的图片需要特别的方法,因为默认的ImageView组件并不支持GIF动画。 要实现在Android应用中显示GIF图片,我们可以使用以下几种方法: 1. **利用第三方库**:由于Android原生API对GIF支持...
- `GifDrawable`是AndroidX库中的一个类,专门用于处理Gif图像,可以作为自定义组件的基础。 2. **自定义GifPlayer类** - 自定义`GifPlayer`类可能包含关键方法,如`loadGif()`用于加载Gif文件,`startAnimation...
首先,"android-gif-drawable" 提供了强大的 GIF 解码和播放功能。它能够处理各种复杂的 GIF 文件,包括那些带有透明度通道或不同帧速率的文件。在 Android 系统原生支持相对较弱的情况下,这个库可以确保 GIF 图像...
在Android开发中,GIF图片的动态显示是一个常见的需求,...总的来说,Android中显示GIF图片需要借助第三方库或自定义视图,理解其内部的解码和动画播放机制,同时关注性能和兼容性优化,确保在不同设备上都能流畅运行。
在布局XML文件中,创建一个ImageView或自定义View,用于显示GIF图像: ```xml android:id="@+id/gif_view" android:layout_width="wrap_content" android:layout_height="wrap_content" /> ``` 3. 加载并...
异步解码意味着该库会在后台线程中进行GIF图像的解码工作,不会阻塞主线程,从而提高了用户体验,特别是对于那些需要频繁加载和播放GIF的应用程序来说。这有助于避免应用因处理复杂图像任务而出现的卡顿现象。 ...
它使用一个内部的`GifDecoder`类来解码GIF图像,`GifDecoder`会将GIF的逻辑屏幕描述、图像描述、图形控制扩展等信息解析出来。`GifDrawable`根据这些信息创建一个帧缓冲区,然后在适当的时间间隔内切换帧,实现动画...
这个名为"一个Android播放gif的Demo"的项目提供了一个实例,展示了如何在Android应用中实现GIF图像的播放功能。下面,我们将深入探讨相关的Android开发知识以及GIF图片处理技术。 1. **Android图像显示库** 在...
Android原生API并没有提供对GIF的直接支持,但在API Level 24及更高版本中,Android引入了`android.graphics.Movie`类,可以解析和播放GIF图像。然而,这个类并不适合在UI线程中使用,因为它可能导致应用卡顿。因此...
本示例源码“GifViewDemo”提供了一种实现方式,旨在帮助开发者理解如何在Android应用中集成并播放GIF动图。下面我们将深入探讨相关知识点。 首先,Android系统本身并不支持直接在ImageView中播放GIF动画,因此我们...
在Android开发中,有时我们需要在应用中展示动态的GIF图像,这通常涉及到对GIF文件的处理。本文将深入探讨如何使用Android Studio中的`GifDrawable`类来实现Gif图的播放功能。 首先,`GifDrawable`是Android支持库...
在Android开发中,处理动态图像是一个常见的需求,特别是GIF图像,它们广泛用于表情、动画效果等场景。AGMobileGift库就是专为简化Android应用与GIF图像交互而设计的工具。这篇详解将深入探讨如何利用AGMobileGift库...
Android系统提供了一个名为`android.graphics.Movie`的类,它可以解析GIF文件并播放。首先,我们需要从资源文件中读取GIF数据,然后创建Movie对象,通过`Movie.decodeStream()`方法解码。之后,我们可以在`onDraw()...
在Android平台上,播放Gif动画是一项常见的需求,无论是加载指示器、按钮反馈还是其他动态展示效果,Gif图像都能提供丰富的视觉体验。本篇将详细探讨如何在Android应用中实现Gif动画的播放。 首先,我们需要理解Gif...
在Android平台上,显示GIF动画图像可能比显示静态图片复杂一些,因为Android原生API并不直接支持GIF的播放。然而,通过第三方库或者自定义控件,我们可以轻松实现这一功能。以下是一个关于如何在Android应用中显示...
2. **Android原生支持**:Android API 24(Nougat)及以上版本提供了`AnimatedGifDrawable`类,可以直接读取并播放Gif。然而,对于低于API 24的设备,需要借助第三方库。 3. **第三方库**:两个常用的库是`...
在Android中,原生的ImageView组件并不支持直接加载和播放GIF动画,因此我们需要借助第三方库或者自定义View来实现。 1. **第三方库**: - **NineOldAndroids**:这是一款兼容Android 2.1及以上的库,用于提供对...
不过,随着Android的发展,从API 24(Nougat)开始,系统引入了`android.graphics.Movie`类,可以解析并显示GIF图像。但这个类并不适用于复杂的GIF播放需求,如循环播放、进度控制等。因此,开发者通常会依赖第三方...
在Android开发中,GIF图像由于其动态特性,经常被用于动画展示,但同时也带来了内存管理的挑战。GIF文件通常较大,如果处理不当,很容易引发`OutOfMemoryError`(OOM)异常,导致应用崩溃。本篇文章将深入探讨如何在...