搜档网
当前位置:搜档网 › Android开发触屏事件的获取和触摸屏幕位置

Android开发触屏事件的获取和触摸屏幕位置

Android开发触屏事件的获取和触摸屏幕位置

Android开发-触屏事件的获取和触摸屏幕位置

在修改后的工厂测试程序中,用到了关于触摸事件的获取,顺便学习关于触摸事件和触摸位

Java代码

1.publicbooleanonTouchEvent(MotionEventevent){

2.

3.//获得触摸的坐标

4.floatx=event.getX();

5.floaty=event.getY();switch(event.getAction())

6.{

7.//触摸屏幕时刻

8.caseMotionEvent.ACTION_DOWN:

9.

10.break;

11.//触摸并移动时刻

12.caseMotionEvent.ACTION_MOVE:

13.

14.break;

15.//终止触摸时刻

16.caseMotionEvent.ACTION_UP:

17.break;

18.}

19.returntrue;

20.}

的知识,其方法如下:

关于publicbooleanonTouchEvent(MotionEventevent)方法:

参数event:参数event为手机屏幕触摸事件封装类的对象,其中封装了该事件的所有信息,例如触摸的位置、触摸的类型以及触摸的时间等。该对象会在用户触摸手机屏幕时被创建。

返回值:该方法的返回值机理与键盘响应事件的相同,同样是当已经完整地处理了该事件且不希望其他回调方法再次处理时返回true,否则返回false。

该方法并不像之前介绍过的方法只处理一种事件,一般情况下以下三种情况的事件全部由onTouchEvent方法处理,只是三种情况中的动作值不同。

屏幕被按下:当屏幕被按下时,会自动调用该方法来处理事件,此时MotionEvent.getAction()的值为MotionEvent.ACTION_DOWN,如果在应用程序中需要处理屏幕被按下的事件,只需重新该回调方法,然后在方法中进行动作的判断即可。

屏幕被抬起:当触控笔离开屏幕时触发的事件,该事件同样需要onTouchEvent方法来捕捉,然后在方法中进行动作判断。当MotionEvent.getAction()的值为MotionEvent.ACTION_UP时,表示是屏幕被抬起的事件。

在屏幕中拖动:该方法还负责处理触控笔在屏幕上滑动的事件,同样是调用MotionEvent.getAction()方法来判断动作值是否为MotionEvent.ACTION_MOVE再进行处理。

Android系统如何实现UI的自适应

Android系统如何实现UI的自适应 做Android应用的人都知道,要一个apk适用多个不同的手机屏幕是很容易的,就是在项目的res文件夹下面有多套相关的资源文件。程序运行的时候,Android系统会根据当前设备的信息去加载不同文件夹下的资源文件。但是Android系统是怎么做到这一点的呢?上网上搜了一下,很少有这方便的介绍,只好自己研究下代码了。下面是我研究代码得到的结果(正确性有待确认),在这里分享一下。 这里以ICS上在Activity的onCreate()方法里面调用setContentView(int resourceID)为例,介绍一下系统如何根据我们的id(https://www.sodocs.net/doc/526293763.html,yout.xxxx)找到合适的layout文件进行解析加载:如果你的res下面有三种不同的layout:layout, layout-sw480dp和layout-sw600dp,这里的swdp表示这个layout文件夹下面的布局文件只有在设备短边的最小宽带为N时才加载。你的设备是800x480的分辨率,那么这个apk安装在你的设备上就会加载layout-sw480dp里面的布局文件。下面是framework的java层调用链: Activity.setContentView(int resourceID) -> PhoneWindow.setContentView(int resourceID) -> LayoutInflater.inflate(int resource, ViewGroup root) -> LayoutInflater.inflate(int resource, ViewGroup root, boolean attachToRoot) -> Resources.getLayout(int id) -> Resources.loadXmlResourceParser(int id, String type) -> Resources.getValue(int id, TypedValue outValue, boolean resolveRefs) -> AssetManager.getResourceValue(int ident, int density, TypedValue outValue, boolean resolveRefs) -> AssetManager.loadResourceValue(int ident, short density, TypedValue outValue, boolean resolve) 在上面的掉用链中: 1. 最后加载的是哪个xml是由Resources.getValue(int id, TypedValue outValue, boolean resolveRefs)调用完成之后的outValue.string决定的,因为outValue.string的值就是你的资源文件的具体路径,如: 1) xxx/values/xxx.xml 2) xxx/layout-sw600dp/xxx.xml 2. AssetManager.loadResourceValue()调的是frameworks/base/core/jni/android_util_AssetManager.cpp里面的native方法,如何获得正确的outValue值,在native方法俩面主要有以下几步: 1) 调用frameworks/base/libs/utils/ResourceTypes.cpp 的ResTable::getResource(),遍历所有资源文件 2) 在ResTable::getResource()里面调用ResTable::getEntry()来确定资源文件来自哪个entry,即layout,或者layout-swdp,由此可见,ResTable::getEntry()是我们这个问题的关键 3) 在ResTable::getEntry()里面: a) 首先获取本设备的configurion信息,屏幕分辨率,屏幕大小,locale,横竖屏等。 b) 根据得到的本设备的configurion信息,过滤掉不适应本设备的entry,比如设备是800x480的,那么超过此分辨率的资源(例:layout-sw600dp)就要被过滤掉,实现在frameworks/base/include/utils/ResourceTypes.h中ResTable_config的match函数中 c) 对过滤后的resource进行最佳适配,找到最符合的entry文件。因为之前已经将不符合的,即大分辨率的entry已经被过滤掉了,所以这里就找剩下的最大的就是最佳适配的。实现在frameworks/base/include/utils/ResourceTypes.h中ResTable_config的isBetterThan()函数中。 3. 我做了一个尝试,就是想让800x480分辨率的设备上的应用都加载layout-sw600dp

安卓按钮单击事件

第一种:匿名内部类作为事件监听器类 大部分时候,事件处理器都没有什么利用价值(可利用代码通常都被抽象成了业务逻辑方法),因此大部分事件监听器只是临时使用一次,所以使用匿名内部类形式的事件监听器更合适,实际上,这种形式是目前是最广泛的事件监听器形式。上面的程序代码就是匿名内部类来创建事件监听器的!!! 对于使用匿名内部类作为监听器的形式来说,唯一的缺点就是匿名内部类的语法有点不易掌握,如果读者java基础扎实,匿名内部类的语法掌握较好,通常建议使用匿名内部类作为监听器。 第二种:内部类作为监听器 将事件监听器类定义成当前类的内部类。1、使用内部类可以在当前类中复用监听器类,因为监听器类是外部类的内部类,2、所以可以自由访问外部类的所有界面组件。这也是内部类的两个优势。上面代码就是内部类的形式!! 第三种:Activity本身作为事件监听器

这种形式使用activity本身作为监听器类,可以直接在activity类中定义事件处理器方法,这种形式非常简洁。但这种做法有两个缺点:(1)这种形式可能造成程序结构混乱。Activity 的主要职责应该是完成界面初始化;但此时还需包含事件处理器方法,从而引起混乱。(2)如果activity界面类需要实现监听器接口,让人感觉比较怪异。 上面的程序让Activity类实现了OnClickListener事件监听接口,从而可以在该Activity类中直接定义事件处理器方法:onClick(view v),当为某个组件添加该事件监听器对象时,直接使用this作为事件监听器对象即可。 第四种:外部类作为监听器 ButtonTest类 当用户单击button按钮时,程序将会触发MyButtonListener监听器 外部MyButtonListener类

UI界面设计复习资料

2017—2018安卓UI界面设计期末复习题库 此资料为复习提高资料,与考试无关 选择题 1、下列哪项不是Android四大组件()Seivice B. Activity C. Handler D. Content Provider Android是如何组织Activity的() 以堆的方式组织Activity B. 以栈的方式组织Activity C. 以树形方式组织Activity D. 以链式方式组织Activity 3、关于线程说法不正确的是() A. 在android 中,我们可以在主线程中,创建一个新的线程 B. 在创建的新线程中,它可以操作UI 组件 C. 新线程可以和Handler 共同使用 D. 创建的Handler 对象,它隶属于创建它的线程 下列关于内存回收的说明,哪个是正确的() 程序员必须创建一个线程来释放内存 内存回收程序负责释放无用内存 内存回收程序允许程序员直接释放内存 内存回收程序可以在指定的时间释放内存对象 设置xml布局文件中的字体大小一般用什么单位() dp B. px C. sp D. pt 关于service生命周期的onCreate()和onStart()说法正确的是() 当第一次启动的时候先后调用onCreate()和onStart()方法 当第一次启动的时候只会调用onCreate()方法 如果service已经启动,将先后调用onCreate()和onStart()方法 如果service已经启动,只会执行onStart()方法,不再执行onCreate()方法 Android项目工程下面的assets目录,以下说法正确的是() 这里的文件是原封不动的存储到设备上不会转换为二进制的格式 主要放置多媒体等数据文件 主要放置图片文件 放置字符串,颜色,数组等常量数据

AndroidUI基本控件与事件处理

《Android基础应用》 AndroidUI基本控件与事件处理 ?本章任务 ?使用Android开发本息计算器程序 ?使用Android开发华氏-摄氏温度转换器 ?本章目标 ?熟悉掌握本章基本控件的使用 ?熟练掌握Android常用事件 1.Android基本控件 Android应用开发的一项内容就是用户界面的开发,Android提供了大量功能丰富的UI组件,大部分放在android.widget包及其子包android.view包及其子包 在Android当中View类是最基本的一个UI类,基本上所有的高级UI组件都是继承View类而实现的。如Button(按钮),list(列表),EditText(编辑框),RadioButton(多选按钮),Checkbox(选择框)等都是View类 在Android中,我们可以在Xml文件中使用UI组件也可以在java文件中创建UI组件官方建议采用xml方式,这样的话能够实现界面和代码分离 1.1TextView和EditText TextView是一种用于显示字符串的控件 EditText则是用来输入和编辑字符串的控件,EditText是一个具有编辑功能的TextView

TextView和EditText基本属性 ●android:id设置ID,通过编码可以找到这个组件 ●android:layout_width设置在屏幕上的宽度 ●android:layout_height设置在屏幕上的高度 fill_parent强制性地使构件扩展,以填充布局单元内尽可能多的空间 wrap_content强制性地使视图扩展以显示全部内容 ●android:text设置显示的文本信息 ●android:textColor设置文本颜色 ●android:textSize设置文本尺寸

Android屏幕适配方案分析

Android开发过程中我们常用的尺寸单位有px、dp,还有一种sp一般是用于字体的大小。但是由于px是像素单位,比如我们通常说的手机分辨例如1920*1080都是px的单位。现在Android屏幕分辨率碎片化720x1280、1080x1920、 2280x1080,这就造成例如187px会在各个分辨率的机型上都是显示一样大小的,那肯定不是我们想要的效果,所以用px单位我们是难以达到适配效果的,那么为什么用dp可以呢? 使用px单位从左到右依次为480 800、1080 1920、1440 * 2560 使用dp单位从左到右依次为480 800、1080 1920、1440 * 2560

屏幕总宽度依次为320dp、415dp、411dp dp指的是设备独立像素,以dp为尺寸单位的控件,在不同分辨率和尺寸的手机上代表了不同的真实像素,比如在分辨率较低的手机中,可能1dp=1px,而在分辨率较高的手机中,可能1dp=2px,这样的话,一个187dp高度的控件,在不同的手机中就能表现出差不多的大小了。 android中的dp在渲染前会将dp转为px,计算公式: ?px = density * dp;

?density = dpi / 160; ?px = dp * (dpi / 160); 而dpi是根据屏幕真实的分辨率和尺寸来计算的,每个设备都可能不一样的。 由于density不是固定不变的,所以每个分辨率不同的设备他们的density都肯定不相等,这样就会造成每个设备的宽/高对应的总dp都是不同的,假设480 800分辨率的density是1.5,1080 1920分辨率的density是2.6,1440 * 2560分辨率的density是3.5。那么它们对应的宽度总dp = (宽度px) / density,分别为320dp、415dp、411dp。可以看出单位为dp的时候三个设备之间的差距就不是

Android阅读器实验报告

手机应用开发(论文) 题目: 院(系): 专业班级: 姓名: 学号: 指导教师: 年月日

摘要 本文主要阐述了基于Android的阅读器的设计与实现。本阅读器能够显示文本,能够选择不同的文章,文章至少有5篇;每篇文章可以通过上下调整滚轴来控制浏览文章的不同部分;用户可以调整文章的大小。 关键字Android 阅读器滚轴

目录 一、引言 (1) 1.1 研究设计内容 (1) 1.2系统开发环境 (1) 二、相关技术简介 (1) 三、系统分析 (2) 3.1 阅读器显示需求 (2) 3.2 系统功能模块需求图 (3) 四、系统设计 (4) 4.1系统框架 (4) 4.2功能模块设计 (4) 4.3 UI设计 (5) 五、系统实现 (6) 5.1界面实现 (6) 5.2 系统实现 (6) 六、运行结果 (8) 6.1 主界面运行结果 (8) 6.2 文章显示界面运行结果 (9) 6.3 改变字体大小后的文章显示界面 (10) 七、结论 (11) 参考文献 (12)

一、引言 1.1 研究设计内容 本文设计了基于Android的阅读器。本阅读器能够显示文本,能够选择至少5篇不同的文章,每篇文章都可以通过上下调整滚轴来控制浏览文章的不同部分,而且用户户可以通过按钮调整文章的大小,以适合自己阅读。 1.2系统开发环境 本系统采用Android Studio进行开发,以Java作为开发语言 二、相关技术简介 开发基于Android的阅读器,需要一定的技术作为支持。首先,需要Android的UI界面设计知识。开发者能够使用Android基本知识进行应用程序界面设计,给予用户良好的体验。其次,开发者需要掌握Java编程语言。Android应用程序的实现需要以Java语言作为基础,用以控制Android界面进行相应的交互响应等。 在Android设计知识中,开发者要懂得文章的存储和读取,能够将文章显示在屏幕上,并使用户进行滑动等操作,以方便阅读。然后,开发者能够在文章合适的位置显示垂直滚动条,这样,用户可以直接通过拖到滚动条快速的到达自己想要阅读的地方。而Android地基本控件中只有水平的滚动条,因此,需要开发者能够设计出垂直的滚动条,并且能够将滚动条与滑动视图ScrollView连接起来,以做到滑动文章滚动条会随之改变,拖到滚动条会显示文章的相应部分内容。

Android OnTouchListener触屏事件接口

Android OnTouchListener触屏事件接口 OnTouchListener接口是用来处理手机屏幕事件的监听接口,当为View的范围内触摸按下、抬起或滑动等动作时都会触发该事件。该接口中的监听方法签名如下。 Java代码: public boolean onT ouch(View v, MotionEvent event) 参数v:参数v同样为事件源对象。 参数event:参数event为事件封装类的对象,其中封装了触发事件的详细信息,同样包括事件的类型、触发时间等信息。 节中介绍了一个在屏幕中拖动矩形移动的案例,本节将继续采用该案例的思路,通过监听接口的方式实现在屏幕上拖动按钮移动的案例。开发步骤如下。 创建一个名为Sample的Android项目。 准备字符串资源,打开strings.xml文件,用下列代码替换原有代码。 Java代码: Hello World, Sample Sample 位置 说明:与前面介绍的案例相同,对程序中用到的字符串资源进行定义。 开发布局文件。打开res/layout目录下的main.xml,用下列代码替换其原有代码。

Java代码: