android播放gif我研究过3种
第一 :GifView支持android播放gif,效果是 先加载第一帧,然后慢慢加载完其他的针,这样效果视觉很不好,是从模糊到清晰的过程;
第二:是流行的把gif图片通过工具分拆成n帧,然后使用逐帧动画播放,我感觉很麻烦的样子;
第三 :使用Movie提供的Movie.decodeStream()方法解析gif,然后通过文件流的方式播放,效果特别好 ,和原图片没差
研究之后可以通过canvas实现对gif的拉伸,适配任何屏幕。
核心代码自己加个layout,Activity测试
public class GifView extends View {
private Movie mMovie;
private long mMovieStart;
private int mWidth, mHeight;
private int mViewWidht, mViewHeight;
private OnPlayListener onPlayListener;
public GifView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
public GifView(Context context) {
super(context);
mMovie = Movie.decodeStream(getResources().openRawResource(
R.raw.gif_anim));
}
public GifView(Context context, AttributeSet attrs) {
super(context, attrs);
//使用Movie解析gif图片
mMovie = Movie.decodeStream(getResources().openRawResource( R.raw.gif_anim));
//获得屏幕宽度,高度
mWidth = BaseApplication.getInstance().screenWidth;
mHeight = BaseApplication.getInstance().screenHeight;
//gif图片宽度,高度
mViewHeight = mMovie.height();
mViewWidht = mMovie.width();
}
public OnPlayListener getOnPlayListener() {
return onPlayListener;
}
public void setOnPlayListener(OnPlayListener onPlayListener) {
this.onPlayListener = onPlayListener;
}
boolean isDraw = true;
public void onDraw(Canvas canvas) {
long now = android.os.SystemClock.uptimeMillis();
if (isDraw) {
if (mMovieStart == 0) { // first time
mMovieStart = now;
}
if (mMovie != null) {
int dur = mMovie.duration();
if (dur == 0) {
dur = 5000;
}
//计算gif播放时间,gif播放完成,关闭界面
if (now - mMovieStart >= dur) {
isDraw = false;
if (onPlayListener != null) {
onPlayListener.onFinished();
}
}
int relTime = (int) ((now - mMovieStart) % dur);
mMovie.setTime(relTime);
//根据屏幕大小计算缩放比例
float saclex = (float) mWidth / (float) mViewWidht;
float sacley = (float) mHeight / (float) mViewHeight;
float sameRate = saclex > sacley ? saclex : sacley;
canvas.scale(sameRate, sameRate);
mMovie.draw(canvas, 0, 0);
invalidate();
}
}
}
//gif关闭接口
public static interface OnPlayListener {
public void onFinished();
}
}
分享到:
相关推荐
setMovieResource 设置需要加载的文件;setCyclePaly设置是否一直...不设置循环播放最后会停留在最后一帧,如果需要播放完不显示在OnDraw中可以关闭是否播放完成的保护。 后期继续优化更新手势缩放和加载超大图等功能。
Movie To GIF 中文版是一款易于使用的动画 GIF 转换器...Movie to GIF 提供了在 GIF 文件中播放视频片段的选项。 您可以每秒设置更多帧,因此输出 GIF 显示为原始视频,或者为较小的动画GIF文件设置较少的帧数。 GIF 的
Movie播放GIF,告别Image加载GIF OM的问题.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Movie To GIF 中文版是一款易于...Movie to GIF 提供了在 GIF 文件中播放视频片段的选项。 您可以每秒设置更多帧,因此输出 GIF 显示为原始视频,或者为较小的动画GIF文件设置较少的帧数。 GIF 的宽度和高度也可调节。
gif-movie-view播放gif图.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
AVI 转GIF Movie Gear
Movie to GIF 提供了在 GIF 文件中播放视频片段的选项。 您可以每秒设置更多帧,因此输出 GIF 显示为原始视频,或者为较小的动画GIF文件设置较少的帧数。 GIF 的宽度和高度也可调节。 Movie To GIF 许可证 免费软件
功能介绍: GIF Movie Gear 是一款实用的 GIF 文件制作、编辑、优化、转换软件。您可以用它打开 BMP/GIF/JPG/PNG/PSD/AVI/CUR/ICO 等格式并将它们转换或混合为 GIF 格式,并保存为 BMP/GIF/JPG/PNG/PSD/AVI/CUR/ICO ...
GIF Movie Gear 4.2.1 汉化版
Movie To GIF 视频转GIF.zip含下载地址可存云盘
GIF Movie Gear动画制作教程
GIF制作编辑 GIF Movie Gear V4.1.2 绿色版.rar
GIF Movie Gear软件是一个非常好用的GIF动画制作软件,它的操作使用非常简单,可以将动画图片文件减肥。除了可将编辑好的图片文件存成动画GIF外,还以可输出成AVI或ANI动画游标的文件格式。 NOD32 最新病毒库报无毒...
Gif动画,播放一次就停止播放。目前是用在引导页,欢饮大家指出错误
GIF Movie Gear注册机Keygen.exe
GIF Movie Gear v4.1中文版是好用的GIF格式自制器。 很好用哦,无毒,安装可以使用了
GIF动画制作软件,几乎有需要制作GIF动画的编辑功能它都有,无须再用其它的图型软件辅助。它可以处理背景透明化而且做法容易,做好的图片可以做最佳化处理使图片减肥,另外它除了可以把做好的图片存成GIF的动画图外...
主要介绍了Android通过Movie展示Gif格式图片的相关资料,需要的朋友可以参考下