awtk开发实践——学习篇28: image_animation(图片动画控件)

说明
  本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。
  QQ 群 号:513683159 【相互学习】
内容来源
  官方的手册(免费获取)Pxx=该手册的对应页码xx
  github-awtk

控件说明

  关于 image_animation_t 控件(图片动画控件) 介绍,对应书 P164。(书中还有更详细内容).
    ①指定一个图片前缀,依次显示指定序列的图片,从而形成动画效果。
    ②image_animation_twidget_t的子类控件,widget_t的函数均适用于 image_animation_t控件。

image_animation.c

#include "awtk.h"

static ret_t on_click_fast(void* ctx, event_t* e) {
  widget_t* widget = WIDGET(ctx);
  image_animation_t* image_animation = IMAGE_ANIMATION(widget);
  int32_t interval = image_animation->interval - 10;
  if(interval < 16) {
    interval = 16;
  }

  image_animation_set_interval(widget, interval);			//设置播放间隔时间

  log_debug("interval:%d\n", interval);

  return RET_OK;
}

static ret_t on_click_slow(void* ctx, event_t* e) {
  widget_t* widget = WIDGET(ctx);
  image_animation_t* image_animation = IMAGE_ANIMATION(widget);
  
  int32_t interval = image_animation->interval + 10;
  image_animation_set_interval(widget, interval);					//设置播放间隔时间

  log_debug("interval:%d\n", interval);

  return RET_OK;
}

static ret_t on_click_start_pause(void* ctx, event_t* e) {
  widget_t* widget = WIDGET(ctx);
  image_animation_t* image_animation = IMAGE_ANIMATION(widget);

  if (image_animation_is_playing(widget)) {		//判断是否在播放
    widget_set_prop_str(widget, WIDGET_PROP_EXEC, WIDGET_EXEC_PAUSE_ANIMATOR);		//设置字符串格式的属性
    widget_set_text_utf8(WIDGET(e->target), "play");			//设置控件的文本。只是对widget_set_prop的包装,文本的意义由子类控件决定。
  } else {
    widget_set_prop_str(widget, WIDGET_PROP_EXEC, WIDGET_EXEC_START_ANIMATOR);		//设置字符串格式的属性
    widget_set_text_utf8(WIDGET(e->target), "puase");				//设置控件的文本。只是对widget_set_prop的包装,文本的意义由子类控件决定
  }

  log_debug("on_click_start_pause\n");
  return RET_OK;
}

ret_t application_init() {
  widget_t* image_animation = NULL;
  widget_t* win = window_create(NULL, 0, 0, 0, 0);							//创建window对象
  widget_t* fast = button_create(win, 0, 0, 0, 0);							//创建button对象
  widget_t* slow = button_create(win, 0, 0, 0, 0);							//创建button对象
  widget_t* start_pause = button_create(win, 0, 0, 0, 0);					//创建button对象

  image_animation = image_animation_create(win, 10, 10, 200, 200);			//创建image_animation对象
  image_animation_set_image(image_animation, "ani");						//设置图片前缀。
  image_animation_set_interval(image_animation, 50);						//设置播放间隔时间:50ms
  image_animation_set_range_sequence(image_animation, 1, 9);				//设置播放序列。比如image为”fire”,start_index为0, end_index为99, 将依次播放”fire0”, …, “fire99”。若指定的图片不存在,则重复上一张图片
  image_animation_play(image_animation);									//播放
  widget_set_self_layout_params(image_animation, "center", "10", "200", "200");//设置控件自己的布局(缺省布局器)参数(过时,请用widget_set_self_layout)。
 
  widget_set_tr_text(fast, "fast");											//获取翻译之后的文本,然后调用widget_set_text。
  widget_set_self_layout_params(fast, "10", "b:10", "20%", "30");			//设置控件自己的布局(缺省布局器)参数(过时,请用widget_set_self_layout)。
  widget_on(fast, EVT_CLICK, on_click_fast, image_animation);				//注册指定事件的处理函数。
  
  widget_set_tr_text(slow, "slow");											//获取翻译之后的文本,然后调用widget_set_text。
  widget_set_self_layout_params(slow, "c", "b:10", "20%", "30");			//设置控件自己的布局(缺省布局器)参数(过时,请用widget_set_self_layout)。
  widget_on(slow, EVT_CLICK, on_click_slow, image_animation);				//注册指定事件的处理函数。
  
  widget_set_tr_text(start_pause, "pause");									//获取翻译之后的文本,然后调用widget_set_text。
  widget_set_self_layout_params(start_pause, "r:10", "b:10", "20%", "30");	//设置控件自己的布局(缺省布局器)参数(过时,请用widget_set_self_layout)。
  widget_on(start_pause, EVT_CLICK, on_click_start_pause, image_animation);//注册指定事件的处理函数。

  return RET_OK;
}

执行过程:

  1.生成资源:sh assets_gen.sh,添加新资源故需重新生成资源。【因为此处并不使用.data文件,故可省略】
  2.编译:scons
  3.执行:./bin/demo

实现效果:

awtk开发实践——学习篇28: image_animation(图片动画控件)_第1张图片

你可能感兴趣的:(#,awtk,c语言,嵌入式)