awtk界面实现下拉屏功能

单页面下拉屏

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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值