SkMovie* fMovie;
FILE *fp;
int flen;
int frame;
GifFileType* fGIF;

static int Decode(GifFileType* fileType, GifByteType* out, int size)
{
SkStream* stream = (SkStream*) fileType->UserData;
return (int) stream->read(out, size);
}


void Java_SkiaView_drawGIF(JNIEnv *env,
jobject thizz, jobject canvas)
{
if (fMovie)
{
if (fMovie->duration())
{
fMovie->setTime(SkTime::GetMSecs() % fMovie->duration());
}
else
{
fMovie->setTime(0);
}
SkCanvas* canv = GraphicsJNI::getNativeCanvas(env, canvas );
canv->drawBitmap(fMovie->bitmap(), 0, 0);
}
else
{
LOGE("SkMovie::DecodeFile\n");
fp=fopen("/sdcard/back.gif","r");
fseek(fp, 0L, SEEK_END); //把位置指针移到文件末尾
flen = ftell(fp); //求出文件的总字节数
rewind(fp);
unsigned char* buffer = new unsigned char[flen];

fread(buffer,flen,1,fp);
fclose(fp);

frame = 0;
SkMemoryStream* stream = new SkMemoryStream(buffer, flen, false);
fGIF = DGifOpen( stream, Decode );
if (DGifSlurp(fGIF) != GIF_OK)
{
DGifCloseFile(fGIF);
fGIF = NULL;
}
frame = fGIF->ImageCount;

fMovie = SkMovie::DecodeMemory(((SkStream*)(fGIF->UserData))->getMemoryBase(), flen);
delete []buffer;
delete stream;
LOGE("/sdcard/loading.gif frame: %d", frame);
}

}

更多相关文章

  1. 使用MAT查看Android内存泄露
  2. day2
  3. Android打开外部DB文件
  4. Android(安卓)SDCard操作(文件读写,容量计算)
  5. Hbuild项目Android本地打包
  6. Sense4+ Android(安卓)4.1.1去除拨号连接线办法
  7. Flutter 在Android(安卓)Studio中找不到真机设备
  8. Java的 ProcessBuilder & Process| 在android中用adb 执行一个li
  9. android I/DEBUG堆栈信息

随机推荐

  1. Android(安卓)(Android(安卓)studio3.0.1)
  2. 关于Android的Dialog
  3. 采用MQTT协议实现Android消息推送
  4. Android(安卓)View的绘制机制流程深入详
  5. android 退出应用优雅的方式(新加一种)
  6. input 系统-------android 静音键的流程
  7. ubuntu下的android环境配置
  8. React Native【1.搭建项目HelloWord】
  9. android——Seneor(获得数据值流程以及同
  10. MVP模式