中科世为 FlyThingsOS 上面实现gif动画播放功能

前言

同Android 类似,中科世为的FlyThings OS 的GUI并没有提供直接的gif 播放控件,所以需要播放动图的时候特别麻烦。
因此文档开挂,直接基于TextView控件做一个GIF控件出来播放gif动画。

准备工作

硬件

  1. 准备好一片SV50PD的主板,没有的话淘宝自己买:淘宝购买 。 当然如果对平台足够熟悉的话可以自行编译libgif的静态库再连接。这里为了方便使用,建议就直接选择功能牛x,价格低廉的Linux一体机SV50PD了。
  2. 然后自然就是USB 调试线了。

软件工具

  1. FlyThings IDE,用过的自然就会知道了。不清楚的从developer.flythings.cn 下载
  2. 下载Demo工程,里面就已经包含了(见文末下载方法)

按照文档流程导入项目

导入项目

源码说明

需要一个基本的控件

可以选择textview只显示,也可以选择Button支持按键触控

初始化gif的控件

#include "gif/CGifPlayer.h"

CGifPlayer* gif;
CGifPlayer* gif2;
...
/***
gif播放结束的回调接口
**/
bool gifplaycallback(){
	return 0;
}
/**
 * 当界面构造时触发
 */
static void onUI_init(){
    //Tips :添加 UI初始化的显示代码到这里,如:mText1Ptr->setText("123");
    
	gif = new CGifPlayer(mTextViewgifPtr);
	gif2 = new CGifPlayer(mTextViewGif2Ptr);
}

开始播放


/*
 * 当界面显示时触发
 */
static void onUI_show() {
// 开始播放页面
	gif->play("/mnt/extsd/ui/logo.gif",0);
}

退出页面,删除对象

/*
 * 当界面完全退出时触发
 */
static void onUI_quit() {
	delete gif; // 删除gif对象
}

彩蛋

这里用到了一个内存bmp画到控件的方法,在官方的文档中是没有的。这里可以借用这个方法实现任意控件的扩展哦。
首先,FlyThings UI里面所有的空间都支持一个接口叫

// 在ZKBase.h 里面,
void setBackgroundBmp(struct _bitmap_t *pBmp);

这里的重点就是_bitmap_t 这个结构体的应用

创建这个结构

头文件结构体准备


/***
 * 仅用于Z21的定义,用于setbackgroundbmp的结构体
 */

typedef struct _bitmap_t {
    uint8_t   bmType;
    uint8_t   bmBitsPerPixel;
    uint8_t   bmBytesPerPixel;
    uint8_t   bmAlpha;
    uint32_t  bmColorKey;
    uint32_t  bmWidth;
    uint32_t  bmHeight;
    uint32_t  bmPitch;
    uint8_t*  bmBits;
    uint8_t*  bmAlphaMask;
    uint32_t  bmAlphaPitch;
    uint64_t  bmPhyAddr;
} bitmap_t;

创建这个内存的方法


static bitmap_t* _create_bmp(int w, int h, int bpp) {
	bitmap_t *bmp = (bitmap_t *)calloc(1, sizeof(bitmap_t));

	bmp->bmBytesPerPixel = bpp;
	bmp->bmBitsPerPixel = bpp * 8;
	bmp->bmWidth = w;
	bmp->bmHeight = h;
	bmp->bmPitch = w * bpp;
	bmp->bmBits = (uint8_t *) malloc(bmp->bmPitch * bmp->bmHeight);

	return bmp;
}

应用的方法

bitmap_t* bmp = _create_bmp(fp->SWidth,fp->SHeight,4);
mTextView->setBackgroundBmp(bmp);

刷新控件的方法

mTextView->setInvalid(!mTextView->isInvalid());

删除内存

这里很特殊,不用删除这个内存,因为控件销毁的时候GUI会自动销毁关联的内存块。

至此,搞定了一个自定义控件了,接下来看两个控件的显示效果吧

视频播放

下载方法

链接:https://pan.baidu.com/s/1EQr1l3nwOrfAOYG3I6PGlA
提取码:kiko

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值