最近在做一个项目,项目要求加载 gif图片,而且是自适应各种手机,查找了很多资料,也搜了一些关于Android加载 gif动图的方式
总结如下:
1,直接使用Animation 方法加载 一组图片,然后进行播放(网上有很多例子就不在说明了)
2,直接自定义控件显示gif动图(附件为源码,此源码本人亲自验证)
第一种方法网上有很多例子就不在说明了,重点说下第二种方法要注意的地方:
1,AndroidManifest.xml文中添加android:hardwareAccelerated="false" 使用硬件不加速显示
2,重写onMeasure方法,在此重新计算长宽,代码如下:
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if (mMovie != null) {
/*
* Calculate horizontal scaling
*/
float scaleW = 1f;
int measureModeWidth = MeasureSpec.getMode(widthMeasureSpec);
if (measureModeWidth != MeasureSpec.UNSPECIFIED) {
int maximumWidth = MeasureSpec.getSize(widthMeasureSpec);
scaleW = (float) mImageWidth / (float) maximumWidth;
}
/*
* calculate vertical scaling
*/
float scaleH = 1f;
int measureModeHeight = MeasureSpec.getMode(heightMeasureSpec);
if (measureModeHeight != MeasureSpec.UNSPECIFIED) {
int maximumHeight = MeasureSpec.getSize(heightMeasureSpec);
scaleH = (float) mImageHeight / (float) maximumHeight;
}
/*
* calculate overall scale
*/
mScale = 1f / Math.max(scaleH, scaleW);
mMeasuredGifWidth = (int) (mImageWidth * mScale);
mMeasuredGifHeight = (int) (mImageHeight * mScale);
setMeasuredDimension(mMeasuredGifWidth, mMeasuredGifHeight);
}
}
3,注意控件使用时的长宽设置
高宽自适应 如下:
<com.hx.gifimageview.GifImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
android:src="@drawable/readcard"
attr:auto_play="true" />
也可以指定高宽
android:layout_width="150dp"
android:layout_height="150dp"
就可以。
写的点有乱,希望能帮助大家