美文网首页
[Android]开发App,你得知道这些3——触摸事件等

[Android]开发App,你得知道这些3——触摸事件等

作者: 入梦瞌睡 | 来源:发表于2019-09-27 20:51 被阅读0次

0.前言

  • 上一篇文章中,我们讲解了Android的几种布局方式
    有兴趣的可以去看一看

准备工作

在读本文前,你最好有以下准备:

  • (1)安装Android Stuido(以下简称AS
  • (2)有一定的Java基础
  • (3)有一台安卓机
    (可以用模拟器来代替,包括AS自带的以及网上的一些著名模拟器)
  • 若想要了解有关Java的文章等其他主要知识,可以去看前面的文章

(不会使用AS的读者可以参考下面这篇文章中的例子)
[Java]开发安卓,你得掌握的Java知识2

1.本文内容简介

  • 触摸事件处理

  • 使用Tag查找子控件

  • 通过sharedPreference来存储简单数据

2.基础知识讲解

触摸事件处理

  • 触摸事件处理有两种方法:
    (1)回调机制
    (2)监听机制
方法1 监听机制

这种方法会设置一个监听器(listener),用来记录监听者。
监听者必须实现对应的接口,因此监听者要重写触发事件时运行的方法。
当事件触发的时候,会看到底是谁在监听(找监听者)。然后通过调用监听者重写的方法,完成触发事件

方法2 回调机制

这种方法中,可以看作监听器不存在,事件监听器与事件源统一。即用户在组件上触发某个事件时,组件会调用自己的方法以处理该事件。

具体代码和语法在第3部分

通过tag来获得子控件

  • 在xml文件中添加的控件,我们需要为其添加id,这样才能在java文件中用id获取指定的控件

  • 而在java文件中添加的控件,则可以为其添加tag,以此在其他地方找到对应的控件

  • 添加语句:
    int tag = 1;
    ImageView iv = new ImageView(this)
    lineView.setTag(tag)

  • android有四个组件,分别为activity、broadcast、contentprivider、service。在当前的activity中用的是mainactivity.this

  • 通过tag获取控件:
    ImageView iv2
    iv2.getTag(tag)
    这里的tag就是上面设置的那个,注意set/getTag的参数都是int

通过sharedPreference来存储简单数据

  • java一共有四种方式存储数据:
    (1)sharedPreference(偏好设置)(保存少量基本数据)
    (2)file
    (3)sqlite3(保存数据量比较大的数据,保存到服务器端的数据库中)
    (4)network(只有这种不是保存在本地)

  • sharedPreference会保存在设备中的一个xml文件中

  • 由于是在xml中保存的,所以不是适合存储大量数据,一些设置选项可以考虑保存在这里

  • sharedPreference的使用分为两部分,分别对应两个对象

  • 最后一定要使用.commit()或者.apply()来保存,它们的区别:
    editor.commit();//立刻保存
    editor.apply();//异步保存,让一个线程处理保存,不是马上

  • 在Device File Exploer->data->data->项目名->shared_prfes->文件名.xml

  • 具体代码,以及数据保存在哪里,在下文说

3.实际操作

触摸事件——监听机制

第一步 打开activity_main.xml
第二步 把布局改一下(为了方便写代码)
第三步 添加一个控件

<ImageView
android:id="@+id/box"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@color/colorPrimary"
android:layout_centerInParent="true"/>


第四步 打开MainActivity,并找到这个控件
  • 在onCreate中,用id找到这个控件
    ImageView iv = findViewById(R.id.box);
    这里的R.id.box表示res中的id名为box的控件
    ( android:id="@+id/box")这句话添加了id
第五步 给这个控件添加监听器
  • 直接在控件后面输入一个点.,然后输入setOnTouch。。。看到可以选择之后直接回车

  • 接着在括号内,先看它需要什么参数(按ctrl+p),然后先输入一个new,然后照着需要的参数的类型输入,就可以看到



  • 回车之后就变为:


  • 最后在方法里面书写触发事件时,需要执行的内容


    (这里要按照图里一样,把return 的值改为true)
  • 以上即为比较常用的,通过匿名类来处理监听机制

其他相关的监听方法:

(1)在括号内不写new什么的,而写一个this,表示当前的这个界面
然后在this(低下会画红线)旁边按alt+enter,选择有implement那个,表示这个MainActivity实现这个接口



选择要实现的方法之后,在这个方法写具体内容即可



(2)可以单独创建一个实现该接口的类,然后创建一个这个类的对象,放在括号中,而不是使用匿名类

  • 使用匿名类一般是只需要处理这一个事件。如果有多个时间,可以考虑创建一个类,或者是使用方法(1)

触摸事件——回调机制

第一步 找到要触发这个事件的类(如果是整个屏幕,就找MainActivity)
第二步在里面写onTouchEvent(MotionEvent event)这个方法

当触摸事件被触发的时候,系统就会回调这个被重写的方法

  • 如果是写在MainActivity中的话,这个方法要写在onCreate外面


  • return要改为true
  • 这里可以使用event.getAction这个方法,它返回的是一个int,不同的int代表着不同的时间,而Motion.事件名则分别对应这事件(Motion.事件名是已经被定义好的int)



    表示如果有按下的事件

通过sharedPreference来存储简单数据

语法顺序如下:
SharedPreferences sp = getSharedPreferences(fileName,MODE_PRIVATE);
其中,fileName为文件名,MODE_PRIVATE代表该文件是私有数据

然后,通过以下语句,存储密码
SharedPreferences.Editor editor = sp.edit();
editor.putString("password",inputPassword);
editor.commit();

  • 其中,inputPassword是需要存储的值,"password"是这个值的“键”(一个名字),就是通过这个名字,可以找到inputPassword
  • 必须有editor.commit()进行保存(第二部分有说过两种保存的方式)

String orgPassword = sp.getString("password",null);
用这句话来获得SharedPreference所存的xml文件中对应值的内容

  • null表示如果没有名字叫password的,那么返回一个null

3.总结

(1)触发事件的方法需要熟练清楚,在后面的内容中经常需要使用到这些
(2)如果需要给某些控件代号的话,可以用setTag,然后到时候用getTag就能分辨到底是哪个控件
(3)SharedPreference只能存储少量数据

相关文章

网友评论

      本文标题:[Android]开发App,你得知道这些3——触摸事件等

      本文链接:https://www.haomeiwen.com/subject/lsryectx.html