单页面下拉屏
1.src/common/下创建slidescreen.h slidescreen.c
slidescreen.h
#ifndef SLIDESCREEN_H
#define SLIDESCREEN_H#include "awtk.h"
#include "../common/navigator.h"BEGIN_C_DECLS#define false 0
#define true 1//滑屏动作值
#define SLIDE_SCREEN_NULL 0 //滑屏空值
#define SLIDE_SCREEN_UP 1 //滑屏上滑
#define SLIDE_SCREEN_LEFT 2 //滑屏左滑
#define SLIDE_SCREEN_RIGHT 3 //滑屏右滑
#define SLIDE_SCREEN_DOWN 4 //滑屏下滑#define MAXIMUM_THRESHOLD_FOR_SLIDE 35 //滑动最大阈值typedef struct sliding_screen_parameters{uint8_t start;uint8_t end;uint16_t start_x;uint16_t start_y;uint16_t end_x;uint16_t end_y;
}sliding_screen_parameters;/*** @method sliding_screen_parameters_init* 初始化滑屏参数。* * @return {ret_t} 返回RET_OK。*/
extern ret_t sliding_screen_parameters_init(void);
/*** @method get_slide_screen_coordinates* 获取滑屏的坐标参数。* @param {event_t*} e 目标事件。* * @return {ret_t} 返回RET_OK。*/
extern ret_t get_slide_screen_coordinates(event_t* e);
/*** @method get_slide_screen_direction* 获取滑屏方向。* @return {uint8_t} 返回滑屏动作值。*/
extern uint8_t get_slide_screen_direction();END_C_DECLS#endif /*SLIDESCREEN_H*/
slidescreen.c
#include "../common/slidescreen.h"sliding_screen_parameters m_sliding_screen_parameters;ret_t sliding_screen_parameters_init(void) {m_sliding_screen_parameters.start = false;m_sliding_screen_parameters.end = false;return RET_OK;
}ret_t get_slide_screen_coordinates(event_t* e) {pointer_event_t* evt = pointer_event_cast(e);// printf("\nevt->pressed:%d\n",evt->pressed);if(evt->pressed){if(!m_sliding_screen_parameters.start){m_sliding_screen_parameters.start = true;m_sliding_screen_parameters.start_x = evt->x;m_sliding_screen_parameters.start_y = evt->y;// printf("pointer_start x:%d y:%d",evt->x,evt->y);}else{// printf("\nend\n");m_sliding_screen_parameters.end_x = evt->x;m_sliding_screen_parameters.end_y = evt->y;m_sliding_screen_parameters.end = true;// printf("pointer_end x:%d y:%d",evt->x,evt->y);} }return RET_OK;
}uint8_t get_slide_screen_direction() {int16_t xlen;int16_t ylen;if (m_sliding_screen_parameters.end){m_sliding_screen_parameters.start = 0;m_sliding_screen_parameters.end = 0;xlen = m_sliding_screen_parameters.end_x - m_sliding_screen_parameters.start_x;ylen = m_sliding_screen_parameters.end_y - m_sliding_screen_parameters.start_y;if (abs(xlen) > MAXIMUM_THRESHOLD_FOR_SLIDE )//左右滑动{if (abs(ylen) <= 20){if (xlen > 0){return SLIDE_SCREEN_RIGHT; }else{return SLIDE_SCREEN_LEFT; }}}else//上下滑动{if (abs(ylen) > MAXIMUM_THRESHOLD_FOR_SLIDE){if (ylen > 0){return SLIDE_SCREEN_DOWN; }else{return SLIDE_SCREEN_UP; }}else if(m_sliding_screen_parameters.start_y>SCREEN_SLIDE_START&&m_sliding_screen_parameters.end_y<SCREEN_SLIDE_AERA){// printf("slide ---------------------------up\n");return SLIDE_SCREEN_TOP;}else if(m_sliding_screen_parameters.start_y<SCREEEN_HEIGHT&&m_sliding_screen_parameters.end_y>(SCREEEN_HEIGHT-SCREEN_SLIDE_AERA)){// printf("slide ----------down\n");return SLIDE_SCREEN_BOTTOM;}}}return SLIDE_SCREEN_NULL;
}
左滑和右滑等可以实现
若全局需要下拉屏
在src/application.添加以下代码
static ret_t on_page00_home_pointer_up(void* ctx, event_t* e) {pointer_event_t* evt = pointer_event_cast(e);uint8_t common[32] = {0};// TODO: 在此添加控件事件处理程序代码switch (get_slide_screen_direction()){case SLIDE_SCREEN_UP:/* code */nvc_fastcon_variable_init(key,1);printf("nvc_fastcon_variable_init\n");break;case SLIDE_SCREEN_LEFT:common[0] = 0x80;nvc_fastcon_device_control(1,common,1);printf("nvc_fastcon_device_control\n");/* code */break;case SLIDE_SCREEN_RIGHT:common[0] = 0x00;nvc_fastcon_device_control(1,common,1);printf("nvc_fastcon_device_control\n");/* code */break;case SLIDE_SCREEN_DOWN:return navigator_switch_to("page01_down",0);break;default:break;}
}
初始化加入以下代码
widget_t *window_down = window_manager();
widget_on(window_down, EVT_POINTER_MOVE, on_page00_home_pointer_move, NULL);
widget_on(window_down, EVT_POINTER_UP, on_page00_home_pointer_up, NULL);