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

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

上一节我们使用了多线程的方法去获取标准输入与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;
}

猜你喜欢

转载自blog.csdn.net/qq_35031421/article/details/114095781