GIF在某些gif图片上播放较慢
问题描述:
我正在使用Glide库将gif文件加载到我的应用程序中。这里我实现了:GIF在某些gif图片上播放较慢
GlideDrawableImageViewTarget imageViewPreview = new GlideDrawableImageViewTarget(gifSplach);
Glide.with(this)
.load("http://i.imgur.com/Cpw2pk6.gif")
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
//Toast.makeText(activity, ""+e.getMessage(), Toast.LENGTH_SHORT).show();
return false;
}
})
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imageViewPreview);
但由于某些原因gif文件加载非常慢的帧。我试图谷歌,但我无法弄清楚。我使用的Glide版本3.7.0
答
你不需要任何库,只需使用此代码: 步骤1
public class GifView extends View {
public Movie mMovie;
public long movieStart;
private int gifId;
public GifView(Context context) {
super(context);
}
public GifView(Context context, AttributeSet attrs) {
super(context, attrs);
initializeView(attrs.getAttributeResourceValue
("http://schemas.android.com/apk/r
es-auto", "src", 0));
}
public GifView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initializeView(attrs.getAttributeResourceValue(
"http://schemas.android.com/apk/
res-auto", "src", 0));
}
private void initializeView(final int id) {
InputStream is = getContext().getResources().openRawResource(id);
mMovie = Movie.decodeStream(is);
this.gifId = id;
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.TRANSPARENT);
super.onDraw(canvas);
long now = android.os.SystemClock.uptimeMillis();
if (movieStart == 0) {
movieStart = now;
}
if (mMovie != null) {
int relTime = (int) ((now - movieStart) % mMovie.duration());
mMovie.setTime(relTime);
mMovie.draw(canvas, getWidth() - mMovie.width(), getHeight() -
mMovie.height());
this.invalidate();
}
}
public void setGIFResource(int resId) {
this.gifId = resId;
initializeView(this.gifId);
}
public int getGIFResource() {
return this.gifId;
}
}
第2步:添加以下在res/ATTRS线.XML
<declare-styleable name="GIFView">
<attr name="src" format="reference" />
</declare-styleable>
3步:添加此行的AndroidManifest.xml比活性
android:hardwareAccelerated="false"
第4步:建立在XML这样的观点:
<com.thigale.testproject.GifView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
components:src="@drawable/loading" />
步骤5在你创建的视图的父活动,加上下面几行:
xmlns:components="http://schemas.android.com/apk/res-auto"
答
我减小了.gif
的大小并从drawable中加载它。它会为我工作。
GlideDrawableImageViewTarget imageViewPreview = new GlideDrawableImageViewTarget(gifSplach);
Glide.with(this)
.load(R.drawable.gif_splash)
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
//Toast.makeText(activity, ""+e.getMessage(), Toast.LENGTH_SHORT).show();
return false;
}
})
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imageViewPreview);
+0
好兄弟它的帧速率取决于它的大小 – Ahmad
也许是因为它下载速度慢?尝试预先下载它并将其放入资产中,然后从资产中播放它 –
我的.gif内存大小为5 MB,即使从资产/原始文件夹中获取也很慢。 –
您的'.gif'大小为5.2 MB,这可能是慢帧速率背后的原因 –