单页面下拉屏
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);