一 : 金榜题名 海兰F2触控教学一体机祝学子圆梦
【61阅读IT新闻频道】恐惧、激动、忐忑、期待……一年一度的高考又将如期而至,这场人生前20年最重要的战斗,令莘莘学子每天和时间赛跑,笔触、轻纸间沉淀着他们沉甸甸的象牙塔之梦。2017高考就在明天!努力奋斗的学子们,请收下海兰(HAILAN)的倾辞一句——惟愿君乘风破浪,心想往之,金榜题名!
“十年磨剑放光芒,笔尖生辉多力量”,高中在人生旅途上,是一段阳光灿烂的日子,更是一段激情燃烧的岁月。请记住哲人的话:“你现在所站的位置并不重要,而是朝那个方向走很重要”,高考是人生的起点,而不是终点。“愿你们合上笔盖的那一刻,有武士将刀收回剑鞘般的骄傲!”
你的理想就握在你的笔杆里,承载着十余载的寒来暑往,你将写下去的每一个字,虽不能定义你的未来,却能浓缩你最好的青春时光。
三年的养精蓄锐,十八岁的豪情壮志,十八岁的英武锐气,厉兵秣马,严阵以待。海兰(HAILAN)品牌旗下新品F2教学一体机,将电脑主机、显示器、电视、触控、音箱整合成为一体,为教师和学生的学习、创作、协作以及分享提供帮助,助力高三学子们在这被寄予厚望的人生转折处赢得了令人羡慕的转身。
与黑板相比,F2不仅有黑板的互动性,还可以使用或编辑丰富多彩的电子课件。配置英特尔最新6代/7代全系列CPU,全新升级“14nm+”工艺,可以使得高三学子们快速奏响不一样的学习体验。1080P高清域屏,视野更宽广,画面逼真呈现,刷新视觉体验。
海兰(HAILAN)F2这么给力,还要支一招给学子们高考呢!
山重水复疑无路,make后面不加to。春色满园关不住,前面有do后没to。君问归期未有期,PV=nRT。国破山河在,E=U内+U外。床前明月光,E=MC方。黑云压城城欲催,CO2遇碱变石灰。瀚海阑干百丈冰,酸脱羟基醇脱氢。秦时明月汉时关,高价氧化低价还。
高考,是一次不可缺席的成人礼,只要认真努力过,得之我幸,不得我命,如此而已。高考在即,请相信自己,你已经很好!!!
购买方式:京东搜索“海兰一体机”
想要了解海兰更多信息,请登录海兰官网:www.hailan.cn
营销资询电话:0755-29594189
想要了解海兰的产品信息,请留意本站的后续报道。
IT新闻微信公众平台
第一时间获取新鲜资讯
使用手机扫描左方二维码
二 : Android触控MotionEvent(一)
这是我个人的看法,要学好android触控,了解MotionEvent是必要,对所用的MotionEvent常用的API要比较深入的了解.
下面是我个人的学习过程记录:
MotionEvent源代码可以在ocs看到,当然你也可以在SDK中下载源代码,或者其他地方,如:
https://github.com/CyanogenMod/android_frameworks_base/blob/ics/core/java/android/view/MotionEvent.java
(1)首先是MotionEvent 中getAction()与getActionMasked()的区别:
首先看代码:
他们有什么区别呢?如果mAction的值是在0x00到0xff之间的话。getAction()返回的值,和getActionMasked()的返回的值是一样的。
(Q1)那什么时候返回的值是一样的呢?即当mAction值大于0xff时,那什么时候会大于0xff呢?
这就是,当有多点触控时,mAction的低8位即0x00到0xff用来表示动作的类型信息。
例如:MotionEvent#ACTION_DOWN的值是 0,即0x00。
MotionEvent#ACTION_UP的值是1,即0x01。
等等。
但是,我们知道Android是支持多点触控的,那么怎么知道这个一个MotionEvent是哪一个触控点触发的呢?那么就还需要MotionEvent带有触控点索引信息。
Android的解决方案是:在mAction的第二个8位中存储。
例如,如果mAction的值是0x0000,则表示是第一个触控点的ACTION_DOWN操作。
如果mAction的值是0x0100呢,则表示是第二个触控点的ACTION_DOWN操作。
第三个的ACTION_DOWN呢?相信你可以推出来是0x0200。
总而言之,mAction时的低8位(也就是0-7位)是动作类型信息。
mAction的8-15位呢,是触控点的索引信息。(即表示是哪一个触控点的事件)。
(Q2),为什么不用两个字段来表示。
如 int mAction,int mPointer,
mAction表示动作类型,mPointer表示第几个触控点。
因为,动作类型只要0-255就可以了,动作类型,mPointer也是。
只要一个字段(32位),否则需要两个字段(32*2=64位),即可以节约内存。又可以方便提高处理速度。
不过通常我们都是以不同的字段来存储不同的信息。但是在计算机内部他们还是变成了0,1。
计算机始终还是以位来存储信息的。如果我们多我熟悉以位为基本单位来理解信息的存储。对于理解android中的很多变量是很有帮助的。因为他其中的很多东西使用的这样的节约内在的技巧。
如onMeasure中的MeasureSpec。
=================== theabove isupdate at 2013-01-24=====
先看关于这两个方法注释:
我简单的翻译如下:
在上面的两个方法中注释出现差异的地方是对于ACTION_POINTER_DOWN的描述:通过getAction()返回的ACTION_POINTER_DOWN的是与转换触控点索引的合成值.而getActionMasked()则就是一个ACTION_POINTER_DOWN的值:
这么来看我们知道一个action的代码值还包含了action是那个触控点的索引值:现在我们对比来看看ACTION_MASK和ACTION_POINTER_INDEX_MASK
还没有看出来什么吗?
您把ACTION_MASK看成是0x00ff就知道了吧。也就是说,一个MotionEvent中的action代码,前8位(0-7位)是实实在在包含表示哪一个动作常量。后八位(8-15位)呢就是包含了触控点的索引信息。因为ACTION_MASK= 0x00ff所以,经过ACTION_MASK掩码过后的action码就没有索引信息了.
如何得索引值呢?
原理:
先将action跟0xff00相与,清除前8位(0-7位)用于存储动作常量的信息,然后将action右移8位就可以得到索引值了.
我们就可以自己想办法得到索引信息了.
即先对action用ACTION_POINTER_INDEX_MASK进行掩码处理,
即 maskedIndex =action&ACTION_POINTER_INDEX_MASK = action&0xff00
这个掩码也就是将action这个数的前8位清零.
然后再将maskedIndex向右移8位就能够得到索引值了.
再看看android真实是怎么做的吧,
用于右移8位的常量.
1 | public final int getActionIndex(){ |
2 |
return (mAction & ACTION_POINTER_INDEX_MASK)>> ACTION_POINTER_INDEX_SHIFT; |
3 | } |
为什么要有索引信息?
因为,这样说吧,android中,当有触摸事件发生时(假设已经注册了事件监听器),调用你注册监听器中的方法onTouch(,MotionEventev);传递了一个MotionEvent的对象过来. 但是,想想,上面只传递进来一个MotionEvent过来,如果只是单点触控那是没有问题.问题就是当你多个手指触控的时候也是只传递这一个MotionEvent进来,这个时候,你当然想知道每个手指的所对应的触控点数据信息啦.所以MotionEvent中有就要索引信息了.
事件是你可以很容易通过API看到,MotionEvent还包含了移动操作中其它历史移动数据. 方便处理触控的移动操作.
androidsdk对于这个类的描述中就有这么一句:
For efficiency, motion events with ACTION_MOVE may batchtogether multiple movement samples within a singleobject
我翻译下:"出于效率的考虑,事件代码为ACTION_MOVE的Motion,会在一个MotionEvent对象中包含多个移动数据采样."
现在我们对于MotionEvent有了初步的了解了.
PS:
我发现android4中MotionEvent中的代码大多变成了原生代码了:
是不是进步了呢?哈哈!
转自:http://my.oschina.net/banxi/blog/56421
本文标题:触控一体机-金榜题名 海兰F2触控教学一体机祝学子圆梦61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1