您的位置:首页 > 移动开发 > Android开发

手机电阻触摸屏”,“电容触摸屏”,“多点触摸技术”的工作原理及Android多点触控开发

2011-05-27 21:57 344 查看
 

      首先说一下“手机电阻触摸屏”,“电容触摸屏”及“多点触摸技术”的工作原理 

 

 

      电阻屏:

 

      电阻触摸屏的屏体部分是一块多层复合薄膜,由一层玻璃或有机玻璃作为基层,表面涂有一层透明的导电层(ITO膜),上面再盖有一层外表面经过硬化处 理、光滑防刮的塑料层。它的内表面也涂有一层ITO,在两层导电层之间有许多细小(小于千分之一英寸)的透明隔离点把它们隔开。当手指接触屏幕时,两层 ITO发生接触,电阻发生变化,控制器根据检测到的电阻变化来计算接触点的坐标,再依照这个坐标来进行相应的操作,因此这种技术必须是要施力到屏幕上,才 能获得触摸效果。

      电阻屏根据引出线数多少,分为四线、五线等类型。五线电阻触摸屏的外表面是导电玻璃而不是导电涂覆层,这种导电玻璃的寿命较长,透光率也较高。"

      电阻式触摸屏的ITO涂层若太薄则容易脆断,涂层太厚又会降低透光且形成内反射降低清晰度。由于经常被触动,表层ITO使用一定时间后会出现细小裂纹,甚至变型,因此其寿命并不长久。

      电阻式触摸屏价格便宜且易于生产。四线式、五线式以及七线、八线式触摸屏的出现使其性能更加可靠, 同时也改善了它的光学特性。

 

 

      电容屏:

      电容式触摸屏利用人体的电流感应进行工作,其触摸屏由一块四层复合玻璃屏构成。当手指触摸在触摸屏上时,由于人体电场、用户和触摸屏表面形成以一个耦合电容,对于高频电流来说,电容是直接导体,于是手指从接触点吸走一个很小的电流。这个电流分别从触摸屏四角上的电极中流出,并且流经这四个电极的电流 与手指到四角的距离成正比,控制器通过对这四个电流比例的精确计算,得出触摸点的位置信息。

      电容式触摸屏具有灵敏度高,容易实现多点触控技术等优点。但电容屏缺点也很明显,电容屏的反光严重,而且电容技术的四层复合触摸屏对各波长光的透光 率不均匀,存在色彩失真的问题,由于光线在各层间的反射,还造成图像字符的模糊。且对手机用户来说其技术特点决定了其只能使用手指进行操作,不能用手套、触控笔等操作。电容屏最大的缺点就是“飘移”。由于电容随温度、湿度或接地情况的不同而变化,所以当环境温度、湿度、环境电场发生改变时, 都会引起电容屏的漂移,造成定位不准确。

 

 

      多点触摸技术:

 

      多点触摸的定义来自应用,多点触摸屏的最大特点在于可以两只手,多个手指,甚至多个人,同时操作屏幕的内容,更加方便与人性化.多点触摸技术也叫多 点触控技术。比如说iPhone的用两个手指在屏幕上的划动来对图片进行放大和缩小。多点触摸屏幕的工作原理是在导电层上划分出了许多独立的触控单元,而每个单元通过独立的引线连接到外部电路。由于所有的触控单元呈矩阵形排布,所以无论用户手指接触到哪一个部分,系统都能够对相应手指动作产生反应。

 

      电容屏比较容易实现多点触摸技术。电阻屏其实也可以实现多点触摸技术。

 

 

      Android多点触控技术开发:

 

      Android多点触控在本质上需要LCD驱动和程序本身设计上支持,目前市面上HTC、Motorola和Samsung等知名厂商只要使用电容屏触控原理的手机均可以支持多点触控Multitouch技术,对于网页缩放、手势操作上有更好的用户体验。 在Android平台上事件均使用了MotionEvent对象方式处理,比如开始触控时会触发ACTION_DOWN而移动操作时为 ACTION_MOVE最终放开手指时触发ACTION_UP事件。当然还有用户无规则的操作可能触发ACTION_CANCEL这个动作。

 

      首先提醒大家多点触控需要LCD驱动和应用软件两个支持才能实现,所以部分比较老的,比如Android 2.1以前或在北美上市的手机可能无法支持多点触控在固件上,由于Apple专利原因在欧洲和亚太地区的Android 2.1以后的新款机型固件均已经在屏幕驱动中支持,同时模拟器也无法实现多点触控的测试。

 

     下面用Android SDK中的方法来实现如何通过应用层支持多点触控操作,对于常规的控件触控操作在内部为View的setOnTouchListener()接口实现的 onTouchEvent()方法来处理。对于onTouchEvent方法的参数MotionEvent我们可以详细处理来实现对多点触控的了解,比如

 

 

event.getAction() //获取触控动作比如ACTION_DOWN
event.getPointerCount(); //获取触控点的数量,比如2则可能是两个手指同时按压屏幕
event.getPointerId(nID); //对于每个触控的点的细节,我们可以通过一个循环执行getPointerId方法获取索引
event.getX(nID); //获取第nID个触控点的x位置
event.getY(nID); //获取第nID个点触控的y位置
event.getPressure(nID); //LCD可以感应出用户的手指压力,当然具体的级别由驱动和物理硬件决定的
event.getDownTime() //按下开始时间
event.getEventTime() // 事件结束时间
event.getEventTime()-event.getDownTime()); //总共按下时花费时间
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息