数码相框(十三、实现电子书滑动翻页)

注:本人已购买韦东山老师第三期项目视频,内容来源《数码相框项目视频》,只用于学习记录,如有侵权,请联系删除。

上一节我们使用了多线程的方法去获取标准输入与LCD触摸屏的输入事件,这一节将在此基础上通过在LCD触摸屏上滑动,实现控制电子书的上下翻页。如下图所示,是一个LCD触摸屏,我们通过向左向右滑动控制电子书的上下翻页。那么我们的程序怎么做呢?从按下开始记录按下起始位置的LCD x 坐标,松开后在次记录松开时的LCD x 坐标,然后用松开时的 x 坐标减去按下时的x坐标计算出他们的差值,通过差值的正负判断是向左还是向右滑动(正:向右滑动,对应翻上一页的输入事件;负:向左滑动,对应翻下一页的输入事件)
在这里插入图片描述
源码只需修改 touchscreen.c 的 TouchScreenGetInputEvent 函数即可,代码如下:

static int TouchScreenGetInputEvent(PT_InputEvent ptInputEvent)
{
	struct ts_sample tSamp;
	struct ts_sample tSampPress;	
	struct ts_sample tSampRelease;
	int iRet;
	int bStart = 0;
	int iDelta;
		
	static struct timeval tPreTime; /* 上一次的时间值 */

	while(1)
	{
		/* 读取数据 */
		iRet = ts_read(g_ptTSDev, &tSamp, 1); /* 如果无数据就休眠 */
		if (iRet == 1)
		{
			if ((tSamp.pressure > 0) && (bStart == 0))
			{
				/* 刚按下 */
				/* 记录刚开始压下的点 */
				tSampPress = tSamp;
				bStart = 1;
			}
			else if (tSamp.pressure <= 0)
			{   
				/* 松开 */
				tSampRelease = tSamp;

				/* 处理数据 */
				if (!bStart)
				{
					return -1;
				}
				else
				{
					iDelta = tSampRelease.x - tSampPress.x;
					ptInputEvent->tTime = tSampRelease.tv;
					ptInputEvent->iType = INPUT_TYPE_TOUCHSCREEN;
					
					if (iDelta > g_iXres/5)
					{
						/* 翻到上一页 */
						
						ptInputEvent->iVal = INPUT_VALUE_UP;	
					}
					else if (iDelta < (0 - g_iXres/5))
					{
						/* 翻到下一页 */
						ptInputEvent->iVal = INPUT_VALUE_DOWN;
					}
					else
					{
						/* 无法识别 */
						ptInputEvent->iVal = INPUT_VALUE_UNKNOW;
					}

					return 0;
				}
			}
		}
		else
		{
			return -1;
		}
	}
	return 0;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Louis@L.M.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值