我的项目在执行System.loadLibrary("glide-webp")时遇到如下错误:
这个so库文件是最新glide-webpdecoder 生成的
这个原因一直没解决,有谁知道如何解决,困扰一周了,要崩溃了
我的项目在执行System.loadLibrary("glide-webp")时遇到如下错误:
这个so库文件是最新glide-webpdecoder 生成的
【相关推荐】
通过前面的步骤,目前ImageView已经可以渲染第一帧的画面了,那如何让wepb内容动起来呢?答案在WebpDrawable,在WebpDrawable变得可见和动画播放方法被回调时,会调用startRunning方法,而后会根据frameloader去加载下一帧数据:
private void startRunning() {
if(state.frameLoader.getFrameCount() == 1) {
invalidateSelf();
} else if(!isRunning) {
isRunning = true;
state.frameLoader.subscribe(this);
invalidateSelf();
}
}
private void start() {
if (!isRunning) {
isRunning = true;
isCleared = false;
loadNextFrame();
}
}
private void loadNextFrame() {
if (isRunning && !isLoadPending) {
if (startFromFirstFrame) {
gifDecoder.resetFrameIndex();
startFromFirstFrame = false;
}
isLoadPending = true;
int delay = gifDecoder.getNextDelay();
long targetTime = SystemClock.uptimeMillis() + (long) delay;
gifDecoder.advance();
next = new DelayTarget(handler, gifDecoder.getCurrentFrameIndex(), targetTime);
requestBuilder.clone().apply(RequestOptions.signatureOf(new FrameSignature())).load(gifDecoder).into(next);
}
}
可以看出这里将加载下一帧的数据给了delayTarget对象
static class DelayTarget extends SimpleTarget<Bitmap> {
.....
public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
this.resource = resource;
//解析到下一帧资源后,发送消息给handler
Message msg = handler.obtainMessage(1, this);
handler.sendMessageAtTime(msg, targetTime);
}
}
private class FrameLoaderCallback implements Handler.Callback {
public boolean handleMessage(Message msg) {
DelayTarget target;
if (msg.what == 1) {
target = (DelayTarget) msg.obj;
//handler中回调onFrameReady方法
WebpFrameLoader.this.onFrameReady(target);
return true;
}
}
}
void onFrameReady(DelayTarget delayTarget) {
if (isCleared) {
handler.obtainMessage(2, delayTarget).sendToTarget();
} else {
//..省略了通知渲染的步骤
//开始加载下一帧了,动起来了
loadNextFrame();
}
}