互电容式触控技术浅析
“瓜唧唧”通过精心收集,向本站投稿了6篇互电容式触控技术浅析,下面小编给大家整理后的互电容式触控技术浅析,希望大家喜欢!
篇1:互电容式触控技术浅析
自从计算机问世以来,人们就一直在思考如何以更有效的方式实现人与计算机的对话,也即所谓的人机交互技术,容式触摸技术,特别是互电容技术由于具有直接、高效、准确、流畅、时尚等特点,极大程度提高了人和计算机对话的效率和便利性,未来必将替代鼠标和键盘,成为未来消费的主流。
投射电容屏触摸检测原理
投射电容屏可分为自电容屏和互电容屏两种类型。在玻璃表面用ITO(一种透明的导电材料)制作成横向与纵向电极阵列,这些横向和纵向的电极分别与地构成电容,这个电容就是通常所说的自电容,也就是电极对地的电容。当手指触摸到电容屏时,手指的电容将会叠加到屏体电容上,使屏体电容量增加。
在触摸检测时,自电容屏依次分别检测横向与纵向电极阵列,根据触摸前后电容的变化,分别确定横向坐标和纵向坐标,然后组合成平面的触摸坐标。自电容的扫描方式,相当于把触摸屏上的触摸点分别投影到X轴和Y轴方向,然后分别在X轴和Y轴方向计算出坐标,最后组合成触摸点的坐标。
如果是单点触摸,则在X轴和Y轴方向的投影都是唯一的,组合出的坐标也是唯一的;如果在触摸屏上有两点触摸并且这两点不在同一X方向或者同一Y方向,则在 X和Y方向分别有两个投影,则组合出4个坐标。显然,只有两个坐标是真实的,另外两个就是俗称的”鬼点”。因此,自电容屏无法实现真正的多点触摸。
互电容屏也是在玻璃表面用ITO制作横向电极与纵向电极,它与自电容屏的区别在于,两组电极交叉的地方将会形成电容,也即这两组电极分别构成了电容的两极。当手指触摸到电容屏时,影响了触摸点附近两个电极之间的耦合,从而改变了这两个电极之间的电容量。检测互电容大小时,横向的电极依次发出激励信号,纵向的所有电极同时接收信号,这样可以得到所有横向和纵向电极交汇点的电容值大小,即整个触摸屏的二维平面的电容大小。根据触摸屏二维电容变化量数据,可以计算出每一个触摸点的坐标。因此,屏上即使有多个触摸点,也能计算出每个触摸点的真实坐标。
FocalTech互电容解决方案
敦泰科技(FocalTech)是较早开始互电容式触摸屏技术研究和开发的公司之一,在互电容领域拥有数十项国内国际专利,包括互电容式触摸屏体的设计,互电容式触摸检测电路、触摸检测算法、环境自适应算法等技术。利用FocalTech自有专利技术,可以大幅提升互电容触摸屏的以下性能:
1) 抗电磁干扰能力
抗电磁干扰是容式触摸屏系统性能最关键的因素。从起,即有公司开始提供自电容方案的电容式触摸屏技术,但由于抗电磁干扰设计较差,经常发生来电时无法接电话,或者通话结束时无法挂电话的情况。再加上环境变化时触摸屏失效频繁,造成了多个电容式触摸屏手机项目失败,甚至间接引起一些方案公司的倒闭。Focaltech借鉴了现代无线通信领域的跳频技术,同时提高了TX的发送功率,在提高系统信噪比的同时有效抑制了电磁干扰。
2) 信噪比(SNR)
SNR定义为指接收到的信号功率和噪声功率的比值,
SNR是触摸屏系统性能另一个关键因素,其高低直接决定了触摸的精度、线性度和分辨率等性能好坏。 FocalTech主要通过三个途径提高SNR。首先是提高信号发送功率。提高了信号发送信号功率,相应的就提高了接收到信号的功率,从而增加了SNR。其次,降低噪声也是一个有效的方法。FocalTech提供触摸屏设计方案,这些方案都做了非常好的屏蔽设计,例如在触摸屏底部靠LCD一侧增加地平面,在屏体四周增加地线隔离等。这些措施可有效降低噪声的功率。还有一个办法就是提高触摸引起的电容变化量。触摸电容变化量,正比于信号功率。即触摸变化量越大,则检测到的信号功率越大。FTS独有的触摸屏专利技术,能大大提高触摸引起的电容变化率,通常能达到30%以上,远远高于iPhone所采用的触摸屏仅为18%的变化量。
3) 环境适应性
自动适应环境变化,对触摸屏系统亦十分重要。触摸屏直接暴露在空气中,空气的温度、湿度都会影响触摸屏体的电容大小。而触摸屏表面的水滴,则有可能直接造成误触摸。一个良好的设计,必须能在非常大范围能适应环境温度湿度的变化,并且在有少量水的条件下,能正常进行触摸。FocalTech专门开发了环境自适应算法,并配合相应的触摸屏体设计,已经完全解决了环境变化对触摸屏影响问题。
4) 功耗
对于便携式设备而言,功耗也非常关键。而互电容技术采用了二维检测而不是自电容的一维检测,大大增加了检测电路的功耗和后期处理数据的功耗。通常而言,相同规格的触摸屏,互电容技术功耗为自电容技术的2~3倍。因此,降低功耗变得十分关键。FocalTech同时采用了多项技术来降低功耗。在IC设计时,把功耗列为约束第一位,如采用低功耗结构、低功耗工艺、增加硬件加速器等。在坐标计算中,FocalTech开发出了快速坐标计算方案,可简化计算量,大大降低了数据后期处理的时间和功耗。此外,还设计了多个功耗模式,系统可以灵活使用这些模式,降低整体使用功耗。根据实测,FocalTech的方案功耗仅为同类方案功耗的一半左右。
技术和市场发展趋势
随着研究的深入,互电容技术不断成熟,其基本功能、基本架构都已经确定,将来的发展主要集中在细部优化,比如进一步提高信噪比、改善触摸精度(特别是边沿的精度)、降低功耗、增加适应环境变化的能力、提高扫描速度、多点ID识别、多点应用开发,减少悬空触摸影响等。
目前互电容式触摸屏在欧美市场已经成为主流,出货量不断攀升,这也极大促进电容式触摸屏产业链的完善。随着产业链的逐步完善,众多供应商的加入,新材料、新技术和新工艺的应用,也带来各项成本的下降,从而降低整体模组的价格。一些电容触摸屏模组大厂预测,在,完成电极刻蚀的ITO玻璃的价格将降到0.3~0.5美元/英寸,不到现在价格的一半;目前,深圳一些小厂的出货价已经非常接近这个区间。我们预计,电容式触摸屏将来会有明显的降价,在 20,3.5’’的模组的价格可降到5~6美元;而一些低端产品,更有可能达到4美元左右,甚至更低。届时,电容屏将大幅挤占目前电阻屏的市场,无论品牌机或是山寨机市场,电容屏都将成为主流。
篇2:Android多点触控技术和应用框架
Android多点触控技术跟Linux输入子系统紧密相关,本文将从应用的角度说明Android多点触控技术的接口和应用。
一、多点触控场景分析
网络上有关Android多点触控技术的文章多见于两点拉伸进行图片放大缩小。对于,这个场景有两个特点:
1)两点,而不是更多点;
2)对于触点的移动事件(MotionEvent.ACTION_MOVE),只需要计算两点的距离,进而判断两个点之间的距离是变大还是缩小,实现图片放大或者缩小。
这个过程并不需要记录这两个点和之前的两个点的关系。这样讲比较抽象,我们可以用一个例子来解释。如下图:
假设一个人拿着5支笔同时写linux这个单词的一个字母,那就得知道当前的5个触点里面的每个触点和之前的触点的对应关系,才能做到一支笔画一个字母。
这个场景基本上能够覆盖到android多点触控的所有接口的应用了。我们先来介绍接口,最后给出多点触控的应用框架,它理论上可以处理很多点的触控,而不仅仅是2点或者5点。
二、Android多点触控接口
1.onTouchEvent
重载Activity的onTouchEvent接口以处理触控信息。
public booleanonTouchEvent(MotionEvent event)
2.event.getAction
该接口与MotionEvent.ACTION_MASK想与可以得到触控按键的类型,如按下、弹起和移动。
1)MotionEvent.ACTION_DOWN 第一个触控点按下,
2)MotionEvent.ACTION_POINTER_DOWN 屏幕上已经有1个或者多个触点的情况下再按下一个点。
3)MotionEvent.ACTION_UP 最后一个触点弹起
4)MotionEvent.ACTION_POINTER_UP 非最后一个触点弹起。
5)MotionEvent.ACTION_MOVE 触点移动事件
3.event.getActionIndex
获得触控点的索引,其代表触控点在所有触控点中的序号。例如A、B、C三个点依次按下,那么分别对应的index是0、1、2。假设B点弹起,此时A、C的index将是0、1。这时假如新按一个点D,那A、C、D的index将是0、1、2。
从中我们发现,C点的index会因为其他点的弹起而变化。所以不能用该值来跟踪同一个点。
4.event.getPointerId(actionIndex)
通过触控点索引来获得触控点的唯一标识。其自触点被按下开始,直到弹起,该值都不会发生变化,其是触点的一个身份ID。例如A、B、C三个点依次按下,那么分别对应的ID是0、1、2。假设B点弹起,此时A、C的ID依然是0、2。这时假如新按一个点D,那A、C、D的ID将是0、2、1。新增的触点的ID会从0开始递增,发现未用值即拿来用。
5.获得触点坐标
event.getX(actionIndex)、event.getY(actionIndex)获得触点距离所属的View的坐标。event.getRawX(actionIndex)、event.getRawY(actionIndex)获得触点距离屏幕左上角的坐标。
三、多点触控应用框架
篇3:安全自控互控反思
“7.23”甬温线旅客列车特别重大事故,是我们铁路人终生难忘的日子。惨痛的一幕,所造成的负面影响远远超出人们的预料,它不仅给国家和人民财产造成巨大的损失,而且也给予我们娇之自豪的高铁发展带来负面影响。它向我们再一次敲响了安全的警钟。面对当前安全生产工作的严峻形势和艰巨任务,血淋淋的教训告诉我们:“安全责任大如天,安全工作压倒一切,要把客运安全特别是高铁安全摆在重中之重”,否则是别无选择的。怎样才能保证铁路运输安全畅通?我们该怎样做?我的认识是必须吸取教训,深刻反思;必须脚踏实地,忘我工作;必须鼓舞志气,从头再来。
按照中央领导讲话精神,特别是对盛部长三句话讲话深刻内涵的理解,自己从安全管理方面,特别是安全措施的落实、安全关键的卡控、干部作风,以及现场作业、职工两纪等方面,进行了深刻的反思,深感自身的安全责任、安全履责方面还存在不少问题。
一、主要存在的问题有:
1、安全第一的思想还没有牢固树立,安全意识较薄弱,主动参加安全教育积极性不高,对事关安全的问题不够敏感。 深入发动、安全宣传力度不够。对局、段要求记名式传达、学习的文件电报、典型事故案例时有传达不到位,结合实际,查找自身存在的安全隐患不彻底。
2、对规章制度以及相关安全、业务知识还不能完全掌握。平常自己学习安全规章比较少,对现场作业中的安全不能真正理解,使自己的安全防范水平存在一定的差距。有时候出现无法发现不安全因素的情况,对上级检查发现的问题,整改措施制定的不细化,敷衍了事,没有深层次的剖析发生“两违”的原因,存在着怕麻烦,简化程序思想。
3、干部作风务实下沉不到位。工作中是不敢碰硬,好人主义思想严重,局限于量化指标的完成,对“两违”人员采取批评教育得多,硬性考核得少,搞下不为例多,叫真分析少。对违章违纪瞻前顾后前怕狼后怕虎,怕撕破脸皮不好管理,避重就轻。
4、党支部和党员作用发挥突出。在融入中心,创先争优方面,没有凸显出针对性和组织的发动。个别党员没有做到冲的上、顶的上,而是不断违章违纪。影响了安全屏障活动的实际效果。
二、针对以上存在的问题,今后我在安全上要采取的5点整改措施:
1、深刻领会中央领导盛部长讲话精神,做好职工的宣传、引领、思想工作,全力提高从业人员劳动安全防范意识。做到安全警钟长鸣,时刻不能对安全工作有半点松懈。
2、加强业务学习,提高安全水平。今后工作中要进一步加强业务知识和各类规章制度的学习,全面掌握各专业,特别是到发线各个岗位技术知识、安全制度规定,现场安全作业方法,并在实际工作中严格执行,进一步提高自己的安全防范水平。对各专业事故预案,特别是安全卡控的重点进行全面学习和掌握,以确保事故处理快速、安全。
3、切实履行好自己的岗位职责,转变思想跟上安全形势。将安全防范落实到每一个角落。加强从业人员“两违”的查处力度。通过下现场和添乘检查狠查“两违”,检查发现的违章违纪除加强批评教育外,必须严肃考核,消除好人主义和考核避重就轻的现象发生。
4.努力提高职工岗位素质和业务水平。把提高岗位素质就是对自己生命负责,减少违章考核就能对自己的钱包负责,这样一种思想灌输到职工心目中。让职工自发地学习业务素质,控制两违行为,努力杜绝违章违纪,从而防止安全事故发生。
5、发挥政治核心作用。用党支部战斗堡垒作用和共产党员先锋模范带头,开展好创先争优活动,融入中心,服务大局,加强自控型班组建设,切实做到自控、互控和他控。把控安全管理这个“底线”真正落实抓实。
通过这次安全大检查活动,我要不断查找自身存在的问题,在今后的工作中努力工作,以实际行动为铁路的安全生产做出新的贡献。
篇4:互均衡校正技术及其应用
互均衡校正技术及其应用
为了有效利用四维地震勘探,保护由油藏本身引起的`地震响应差异而消除非油藏引起的地震响应差异,必须对四维地震数据体进行互均衡校正.论述了四维地震数据互均衡处理的原理,提出了寻找最佳匹配滤波器获得校正算子的处理方法,并结合某地区的四维地震资料,运用互均衡技术对其进行了校正处理,很好地消除了非期望差异,进一步验证了该方法的正确性和有效性.
作 者:苏云 李国福 黄倩 SU Yun LI Guo-fu HUANG Qian 作者单位:苏云,李国福,SU Yun,LI Guo-fu(成都理工大学,信息工程学院,成都,610059)黄倩,HUANG Qian(中国石化,江汉油田,物探研究院,湖北,潜江,433100)
刊 名:新疆石油地质 ISTIC PKU英文刊名:XINJIANG PETROLEUM GEOLOGY 年,卷(期): 30(5) 分类号:P631.41 关键词:四维地震 互均衡校正 期望差异 非期望差异 4-D seismic exploration cross-equalization calibration desired variation undesired variation difference篇5:Android多点触控MultiTouch浅析
核心技术介绍
本示例是在SurfaceView中利用Canvas来展示用户的多点触控,不过核心技术还是一个常见的方法:onTouchEvent(MotionEvent event)
MotionEvent有以下几个方法需要大家注意一下,不过了是一些常见的方法,如果你onTouchEvent使用得多的话。
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()); // 总共按下时花费时间
代码展示:
public class MTView extends SurfaceView implements SurfaceHolder.Callback { private static final int MAX_TOUCHPOINTS = 10; private static final String START_TEXT = “请随便触摸屏幕进行测试”; private Paint textPaint = new Paint(); private Paint touchPaints[] = new Paint[MAX_TOUCHPOINTS]; private int colors[] = new int[MAX_TOUCHPOINTS]; private int width, height; private float scale = 1.0f; public MTView(Context context) { super(context); SurfaceHolder holder = getHolder(); holder.addCallback(this); setFocusable(true); // 确保我们的View能获得输入焦点 setFocusableInTouchMode(true); // 确保能接收到触屏事件 init(); } private void init() { // 初始化10个不同颜色的画笔 textPaint.setColor(Color.WHITE); colors[0] = Color.BLUE; colors[1] = Color.RED; colors[2] = Color.GREEN; colors[3] = Color.YELLOW; colors[4] = Color.CYAN; colors[5] = Color.MAGENTA; colors[6] = Color.DKGRAY; colors[7] = Color.WHITE; colors[8] = Color.LTGRAY; colors[9] = Color.GRAY; for (int i = 0; i < MAX_TOUCHPOINTS; i++) { touchPaints[i] = new Paint(); touchPaints[i].setColor(colors[i]); } } /** * 处理触屏事件 */ @Override public boolean onTouchEvent(MotionEvent event) { // 获得屏幕触点数量 int pointerCount = event.getPointerCount(); if (pointerCount > MAX_TOUCHPOINTS) { pointerCount = MAX_TOUCHPOINTS; } // 锁定Canvas,开始进行相应的界面处理 Canvas c = getHolder().lockCanvas(); if (c != null) { c.drawColor(Color.BLACK); if (event.getAction() == MotionEvent.ACTION_UP) { // 当手离开屏幕时,清屏 } else { // 在每一个触点上绘制一个十字和坐标信息 for (int i = 0; i < pointerCount; i++) { int id = event.getPointerId(i); int x = (int) event.getX(i); int y = (int) event.getY(i); drawCrosshairsAndText(x, y, touchPaints[id], i, id, c); } // 在每一个触点上绘制一个圆 for (int i = 0; i < pointerCount; i++) { int id = event.getPointerId(i); int x = (int) event.getX(i); int y = (int) event.getY(i); drawCircle(x, y, touchPaints[id], c); } }// 画完后,unlock getHolder().unlockCanvasAndPost(c); } return true; } /** * 画十字及坐标信息 * * @param x * @param y * @param paint * @param ptr * @param id * @param c */ private void drawCrosshairsAndText(int x, int y, Paint paint, int ptr, int id, Canvas c) { c.drawLine(0, y, width, y, paint); c.drawLine(x, 0, x, height, paint); int textY = (int) ((15 + 20 * ptr) * scale); c.drawText(“x” + ptr + “=” + x, 10 * scale, textY, textPaint); c.drawText(“y” + ptr + “=” + y, 70 * scale, textY, textPaint); c.drawText(“id” + ptr + “=” + id, width - 55 * scale, textY, textPaint); } /** * 画圆 * * @param x * @param y * @param paint * @param c */ private void drawCircle(int x, int y, Paint paint, Canvas c) { c.drawCircle(x, y, 40 * scale, paint); } /** * 进入程序时背景画成黑色,然后把START_TEXT写到屏幕 */ public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { this.width = width; this.height = height; if (width > height) { this.scale = width / 480f; } else { this.scale = height / 480f; } textPaint.setTextSize(14 * scale); Canvas c = getHolder().lockCanvas(); if (c != null) { c.drawColor(Color.BLACK); float tWidth = textPaint.measureText(START_TEXT); c.drawText(START_TEXT, width / 2 - tWidth / 2, height / 2, textPaint); getHolder().unlockCanvasAndPost(c); } } public void surfaceCreated(SurfaceHolder holder) { } public void surfaceDestroyed(SurfaceHolder holder) { }}
使用上也是so easy:
setContentView(new MTView(this));
运行效果图:
篇6:Android多点触控MultiTouch浅析
通过多点触屏放大或缩小图像 beforeLenght用来保存前一时间两点之间的距离 afterLenght用来保存当前时间两点之间的距离
public void scaleWithFinger(MotionEvent event) { float moveX = event.getX(1) - event.getX(0); float moveY = event.getY(1) - event.getY(0); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: beforeLenght = (float) Math.sqrt((moveX * moveX)+ (moveY * moveY)); break; case MotionEvent.ACTION_MOVE: // 得到两个点之间的长度 afterLenght = (float) Math.sqrt((moveX * moveX)+ (moveY * moveY)); float gapLenght = afterLenght - beforeLenght; if (gapLenght == 0) { break; } // 如果当前时间两点距离大于前一时间两点距离,则传0,否则传1 if (gapLenght > 0) { this.setScale(scale, 0); } else { this.setScale(scale, 1); } beforeLenght = afterLenght; break; } } }
让图片跟随手指触屏的位置移动 beforeX、Y是用来保存前一位置的坐标 afterX、Y是用来保存当前位置的坐标,
它们的差值就是ImageView各坐标的增加或减少值。
public void moveWithFinger(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: beforeX = event.getX(); beforeY = event.getY(); break; case MotionEvent.ACTION_MOVE: afterX = event.getX(); afterY = event.getY(); this.setLocation((int) (afterX - beforeX),(int) (afterY - beforeY)); beforeX = afterX; beforeY = afterY; break; case MotionEvent.ACTION_UP: break; } }用来放大缩小ImageView 因为图片是填充ImageView的,所以也就有放大缩小图片的效果 flag为0是放大图片,为1是缩小图片
private void setScale(float temp, int flag) { if (flag == 0) { this.setFrame(this.getLeft() - (int) (temp * this.getWidth()),this.getTop() - (int) (temp * this.getHeight()),this.getRight() + (int) (temp * this.getWidth()),this.getBottom() + (int) (temp * this.getHeight())); } else { this.setFrame(this.getLeft() + (int) (temp * this.getWidth()),this.getTop() + (int) (temp * this.getHeight()),this.getRight() - (int) (temp * this.getWidth()),this.getBottom() - (int) (temp * this.getHeight())); } }onTouchEvent事件则如下:
public boolean onTouchEvent(MotionEvent event) { if (inView(imageView, event)) { if (event.getPointerCount() == 2) { imageView.scaleWithFinger(event); } else if (event.getPointerCount() == 1) { imageView.moveWithFinger(event); } } return true; }
源码下载:
download.csdn.net/detail/u013761665/8719349
【互电容式触控技术浅析】相关文章:
1.安全自控互控反思
3.互购协议书
4.触作文350字
5.触的成语
6.互改作文600字
7.互批检查材料
8.学生互批范文
9.互文的诗句
10.角色互换节作文






文档为doc格式