Android实例-手机安全卫士(二十三)-自定义抽象类及使用

一、目标。

  将二十二节中通过滑动切换Activity界面效果的代码提取出来做成一个自定义抽象类,并定义抽象方法,便于其他类的调用。也就是其他Activity(如设置向导2、3、4)通过继承自定义的类,再通过实现其未实现的方法来快速实现滑动切换。

二、代码实现。

  1、在程序包下新建一个类(取名SlideActivity),继承Activity,指定其类型为抽象类(public abstract class SlideActivity extends Activity)。在自定义的抽象类代码中,定义两个抽象方法(public abstract void),分别取名为slideNext()和slidePre(),表示滑向下一步和滑向上一步。该两个抽象方法让继承这个新建类的子类来实现。而现在在新建类里是为了根据滑动方向的结果来决定何时调用这两个抽象方法。

  2、定义一个手势识别器(GestureDetector)对象(取名detector),复写onCreate方法。(以下步骤与二十二节相似,只是if语句中根据判断条件执行不同的抽象方法)在onCreate方法中实例化(new GestureDetector(context, listener)),参数context为上下文,listener为监听器。监听器通过new实例化,new的对象为SimpleOnGestureListener(){...}。在监听器中:

    ①.复写onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY),参数中MotionEvent e1表示手指落到屏幕上的事件, MotionEvent e2表示由目前动作所引起的移动事件, float velocityX、 float velocityY分别表示目前动作在x轴和y轴的移动速度。

    ②.获取手指落到屏幕上事件和移动事件所在的X轴坐标点(e2.getRawX() 、e1.getRawX()),通过if()...判断这两个坐标点的差值确定滑动方向。当e2所在的x轴坐标大于e1所在的x轴坐标,则手势是从左向右滑,此时调用滑向上一步(slidePre())的方法,当e1所在的x轴坐标大于e2所在的x轴坐标,则表示手势是从右向左滑,此时调用滑向下一步(slideNext())的方法。也可以用它们的差值大于某个值(如100)来判断,即只有滑动的距离超过该值时才会执行if里面的语句。

    ③.由于onFling方法的返回值类型是boolean,所以需要在if语句的最后均返回true。该方法的最后一个返回语句不更改。

  3、在新建的抽象类代码里复写触摸事件方法onTouchEvent(MotionEvent event),参数MotionEvent event为当前触摸事件。在该方法里通过手势识别器(GestureDetector)对象(detector)的onTouchEvent(MotionEvent ev)方法,将当前触摸事件传入即可。

  4、由于在之前制作“上一步”、“下一步”按钮样式时,将点击事件(pre(View view)、next(View view))均放在了样式里面,所以也可以将这两个点击事件在新建的抽象类(SlideActivity)中实现,其方法是分别执行滑向上一步(slidePre())和滑向下一步(slideNext())方法的语句。

新建抽象类(SlideActivity)的代码:

 1 package com.example.mobilesafe;
 2
 3 import android.app.Activity;
 4 import android.view.GestureDetector;
 5 import android.view.GestureDetector.SimpleOnGestureListener;
 6 import android.view.MotionEvent;
 7 import android.view.View;
 8
 9 public abstract class SlideActivity extends Activity {
10
11     public abstract void slideNext();
12
13     public abstract void slidePre();
14
15     // 1、定义手势识别器
16     private GestureDetector detector;
17
18     @Override
19     protected void onCreate(android.os.Bundle savedInstanceState) {
20         super.onCreate(savedInstanceState);
21         detector = new GestureDetector(this, new SimpleOnGestureListener() {
22
23             @Override
24             public boolean onFling(MotionEvent e1, MotionEvent e2,
25                     float velocityX, float velocityY) {
26                 if ((e2.getRawX() - e1.getRawX()) > 200) {
27                     // 从左往右滑,滑至上一个页面
28                     slidePre();
29                     return true;
30                 }
31                 if ((e1.getRawX() - e2.getRawX()) > 200) {
32                     // 从右往左滑,滑至下一个页面
33                     slideNext();
34                     return true;
35                 }
36                 return super.onFling(e1, e2, velocityX, velocityY);
37             }
38         });
39     }
40
41     // 3、使用手势识别器
42     @Override
43     public boolean onTouchEvent(MotionEvent event) {
44         detector.onTouchEvent(event);
45         return super.onTouchEvent(event);
46     }
47
48     public void next(View view) {
49         slideNext();
50     }
51
52     public void pre(View view) {
53         slidePre();
54     }
55
56 }

  5、让需要使用滑动切换界面的类继承上述新建的抽象类(SlideActivity),同时实现其未实现的两个方法(滑向上一步(slidePre())和滑向下一步(slideNext())。在这两个未实现的方法中,通过Intent和动画效果实现界面滑动切换。(注意,第一步中无上一步,所以在实现滑向上一步(slidePre())方法后,里面无需写代码。)

时间: 2024-10-28 18:58:35

Android实例-手机安全卫士(二十三)-自定义抽象类及使用的相关文章

Android实例-手机安全卫士(十八)-完成设置向导的4个UI和跳转事件

一.目标. 制作向导设置里面每一步的UI布局及点击事件控制. 1.使用自定义button背景.自定义组合控件.自定义文本样式等. 2.利用SharedPreferences对象,设置应用程序配置信息(向导设置完成后就不再进入)           二.代码实现. 1.在程序包下新建另外3个UI的类(分别为SetupWizard_ui_2.java.SetupWizard_ui_3.java.SetupWizard_ui_4.java),并在配置文件中注册Activity. 2.根据UI设计,在设

Android实例-手机安全卫士(三)-设计主页面UI

一.目标. 主界面UI如图所示: 方面是一个功能列表提示框(采用TextView),下面是功能列表(采用GridView). 二.代码实现. 1.在主界面布局文件(activity_home.xml)中增加组件.主界面布局文件(activity_home.xml)采用线性布局,上面一个TextView,根据UI设置相应属性:下面一个是GridView,通过android:numColumns属性设置该组件的列数,由于GridView还需要inflate单个布局文件,所以为其设置id. 主界面布局

Android实例-手机安全卫士(二十)-使用shape形状,自定义组件边框、形状等

一.目标. 1.实现文本组件的点击事件. 2.实现组件(TextView等)以形状(圆角矩形.椭圆.圆环等)显示,也可为其增加自定义边框.渐变等属性.并可以与样式组合,可实现默认.按下等过程显示不同的形状. 默认:  按下: 二.代码实现. 1.TextView对象带有点击事件,需对clickable属性设为true,并取名点击事件名称,即onclick属性值为resetWizard. 2.在手机防盗界面实现点击事件处理,(即重新进入”设置向导“界面) 点击事件处理代码; //重新进入防盗设置向

Android实例-手机安全卫士(四十二)-设置自定义Toast位置

一.目标 设置自定义Toast窗口的显示位置(第1-2步): 二.代码实现 1.在“显示号码归属地”服务(ShowPhoneAddService)类中的自定义吐司(myToast)方法中,通过窗口对象WindowManager.LayoutParams(params)的gravity属性可设置自定义Toast的对齐方式(顶部:Gravity.TOP,左上角:Gravity.TOP+Gravity.LEFT): 2.通过窗口对象WindowManager.LayoutParams(params)的

Android实例-手机安全卫士(四十)-自定义吐司(二)(布局样式、背景)

一. 自定义Toast的布局.背景等 二.代码实现 1.在res文件夹下的layout文件夹中新建布局文件(Android xml file,取名phone_add_toast),用于定义要显示的Toast的布局方式: 2.根据设计要求自定义的Toast布局为左右的水平线性布局,宽高均为包裹内容,左边为图片,右边为归属地信息文本(由于归属地信息会根据号码不同而改变,因此可为其设置id(tv_phone_add_toast)): (1)图片采用<ImageView>组件,通过android:sr

Android实例-手机安全卫士(二十一)-自定义Activity界面切换动画

一.目标. 实现两个Activity界面的动画切换效果. 二.代码实现. 1.在res文件夹下新建一个名为anim的文件夹. 2.在新建的anim文件夹中新建一个Android xml file文件(取名tran_out),根据动画要求选择根元素(本例为translate),用于实现Activity界面移出屏幕的动画效果. 3.在新建的xml文件中,根标签<translate>的属性中,当输入一个属性时会自动增加命名空间.属性android:fromXDelta表示从哪个X轴来,原点为屏幕左上

Android实例-手机安全卫士(四十三)-自由移动自定义Toast位置

一.目标 实现自定义的Toast窗口在来电时可以自由移动至屏幕的任意位置,并保存该位置 二.代码实现 1.在“显示号码归属地”服务(ShowPhoneAddService)类中的自定义吐司(myToast)方法中,在窗口对象WindowManager.LayoutParams(params,该变量在后面的移动显示位置时需要用到,所以将其定义成服务类的成员变量)的便签(flag)属性里,需删除不可触摸属性(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE)

Android实例-手机安全卫士(十)-自定义对话框

一.目标. 当点击“手机防盗”时弹出自定义的设置密码对话框.如果已经设置密码,则弹出自定义的输入密码对话框. 二.代码实现. 1.在layout文件夹下新建xml(取名setpwddialog.xml)文件用于设置自定义对话框的UI. 新建xml文件代码如下; 1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.a

Android实例-手机安全卫士(二十六)—获取手机内联系人信息

一.目标. 通过内容解析器获取手机联系人信息,并采用自定义的样式显示. 为了便于介绍和重复使用,重新建立一个”读取联系人“工程. 二.代码实现. 1.新建工程,取名为”读取联系人“.在布局文件(activity_main.xml)中,采用ListView组件(其ID为select_contact). 布局文件代码: 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmln