Android中,一般来说一个应用会存在几十个页面,并且一个应用一般也会使用一个特定的主题,其中的页面的风格也是一致的,并且页面中的动画效果、页面的切换效果等也应该保持同样的风格,那么就需要一个基类,来完成页面的基础设置,这就是所谓的基类。

 
界面统一管理原因
 
当应用中的界面达到一定数量级时,如几十个界面,便于项目管理
提高界面的处理速度
避免由于多Activity导致的问题
界面统一管理的基础
当应用中的界面达到一定数量级时,为了能够让用户更容易操作上手,产品设计时会将界面显示风格进行统一。
 
案例驱动:
 
public abstract class BaseSetupActivity extends Activity {
     // 该抽象类,作为四个设置向导的基类,定义共同的方法
     private SharedPreferences mSharedPreferences;
     private static String TAG = "BaseSetupActivity";
 
     // 声明一个手势识别器
     private GestureDetector mGestureDetector;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        mSharedPreferences = getSharedPreferences("config", MODE_PRIVATE);
 
        // 初始化手势识别器
        // 2.初始化手势识别器
        // Basic Default Base Simple
        mGestureDetector = new GestureDetector(this,
               new GestureDetector.SimpleOnGestureListener() {
 
                   /**
                    * 划屏对应的方法. e1 手指第一次触摸屏幕 e2 手指离开屏幕瞬间 velocityX 水平方向移动的速度
                    * <span style="text-decoration: underline;">px</span>/s velocityY 竖直方向移动的速度
                    */
                   @Override
                   public boolean onFling(MotionEvent e1, MotionEvent e2,
                          float velocityX, float velocityY) {
                      if (Math.abs(velocityX) < 100) {
                          Log.i(TAG, "移动的太慢,动作不合法");
                          return true;
                      }
 
                      if ((e2.getRawX() - e1.getRawX()) > 200) {
                          showPre(null);
                          return true;
                      }
                      if ((e1.getRawX() - e2.getRawX()) > 200) {
                          showNext(null);
                          return true;
                      }
                      // 其实返回的就是false
                      return super.onFling(e1, e2, velocityX, velocityY);
                   }
 
               });
 
        // 子类中初始化布局
        initView();
 
     }
 
     // 设置当前的view布局
     public abstract void initView();
 
     // 显示下一个界面
     public abstract void showNext(View view);
 
     // 显示上一个界面
     public abstract void showPre(View view);
 
     // 3.activity被触摸的时候调用的方法 , 需要在这个里面让手势识别器 生效
     @Override
     public boolean onTouchEvent(MotionEvent event) {
        // 让手势识别器 生效
        mGestureDetector.onTouchEvent(event);
        return super.onTouchEvent(event);
     }
 
 }
分析:
案例中主要实现的就是在同一主题下的页面的切换效果进行统一,初始化了手势识别器,并且让手势识别器生效。接下来看一下继承自这个基类的一个页面的设置
 
 
public class Mobile_safeActivity1 extends BaseSetupActivity {
 
     private static String <span style="text-decoration: underline;">TAG</span> = "Mobile_safeActivity1";
 
     @Override
     public void initView() {
        setContentView(R.layout.mobile_safeactivity1);
     }
 
     @Override
     public void showNext(View view) {
        Intent intent = new Intent(this, Mobile_safeActivity2.class);
        startActivity(intent);
        finish();
 
        // 设置切换的动画效果,该方法将会在程序执行startActivity以及finish()方法的时候进行调用
        overridePendingTransition(R.anim.tran_next_in, R.anim.tran_next_out);
     }
 
     @Override
     public void showPre(View view) {
 
     }
 
 }
分析:
非常明显这个Mobile_safeActivity1继承自前面的基类BaseSetupActivity,因此当手指在屏幕上进行滑动的时候,将会触发showNext()和showPre()两个方法,并且在切换时通过overriderPendingTransition()产生屏幕滑动的切换效果,这里可以根据实际需求进行设置,并且这个方法将会在执行finish()方法后自行调用。而在showPre()中没有写任何的内容是因为没有上一页。
 
摘自http://www.2cto.com/kf/201403/288116.html

(转)Android中的基类—抽取出来公共的方法的更多相关文章

  1. Android中的基类—抽取出来公共的方法

    在Android中,一般来说一个应用会存在几十个页面,并且一个应用一般也会使用一个特定的主题,其中的页面的风格也是一致的,并且页面中的动画效果.页面的切换效果等也应该保持同样的风格,那么就需要一个基类 ...

  2. C++类继承中,基类/当前对象属性/当前对象的构造顺序

    [1]中提到,规范的派生类构造函数三个要点: 首先创建基类对象 应通过成员初始化列表,创建基类对象 应该初始化本派生类新增的成员变量 那在构造派生类实例的过程中,其基类(以及多继承的时候多个基类)/当 ...

  3. 谈谈Android中的Rect类——奇葩的思维

    最近在工作中遇到了一些问题,总结下来就是Android中Rect这个类造成的.不得不说,不知道Android SDK的开发人员是怎么想的, 这个类设计的太奇葩了.首先介绍一下Rect类:Rect类主要 ...

  4. 024_MapReduce中的基类Mapper和基类Reducer

    内容提纲 1) MapReduce中的基类Mapper类,自定义Mapper类的父类. 2) MapReduce中的基类Reducer类,自定义Reducer类的父类. 1.Mapper类 API文档 ...

  5. C#在派生类中调用基类成员

    一.在派生类中调用基类成员 在C#的派生类中,我们可以使用base关键字调用基类中的公有或者受保护成员.这些成员只能是构造函数.实例方法或者实例属性. base关键字调用基类成员的语法格式如下: ba ...

  6. C#派生类中使用基类protected成员的方法

    我们知道C#中通过继承可以使一个具有公共数据和方法的基类被广泛应用从而减少代码量,这样派生类会具有基类中所有成员(除构造器等),我们理所当然可以通过派生类实例来使用基类的成员.那么当基类成员被prot ...

  7. 正确理解Widget::Widget(QWidget *parent) :QWidget(parent)这句话(初始化列表中无法直接初始化基类的数据成员,所以你需要在列表中指定基类的构造函数)

    最近有点忙,先发一篇我公众号的文章,以下是原文. /********原文********/ 最近很多学习Qt的小伙伴在我的微信公众号私信我,该如何理解下面段代码的第二行QWidget(parent) ...

  8. C++ 继承 - 在派生类中对基类初始化

    构造函数与基类的其他成员不同,不能被派生类继承,因此为了初始化基类中的成员变量,需要在派生类中调用基类的构造函数(即显式调用),如果派送类没有调用则默认调用基类的无参构造函数(即隐式调用). 显式调用 ...

  9. (转)谈谈Android中的Rect类——奇葩的思维

    最近在工作中遇到了一些问题,总结下来就是Android中Rect这个类造成的.不得不说,不知道Android SDK的开发人员是怎么想的, 这个类设计的太奇葩了.首先介绍一下Rect类:Rect类主要 ...

随机推荐

  1. 混合开发的大趋势之 一个Android程序员眼中的 React.js 箭头函数,const, PropTypes

    转载请注明出处:王亟亟的大牛之路 昨天写了篇React.js的开头之作,讲了讲块级作用域和let,先安利:https://github.com/ddwhan0123/Useful-Open-Sourc ...

  2. JavaEE之反射

    反射定义简单表述: 对于任意一个(动态的)运行中的类,我们都可以解剖它,获取类中的构造方法,成员变量,成员方法. 类的加载 (1)加载 就是指将class文件读入内存,并为之创建一个Class对象. ...

  3. 通俗理解数字签名,数字证书和https

    最近在开发关于PDF合同文档电子签章的功能,大概意思就是在一份PDF合同上签名,盖章,使其具有法律效应.签章有法律效应必须满足两个条件: 能够证明签名,盖章者是谁,无法抵赖 PDF合同在签章后不能被更 ...

  4. IE10下阿里旺旺无法快速登录解决办法

    一直都是用Chrome浏览器的,如果已经登录了旺旺,打开淘宝登录的时候都是会有快速登录的,免得手工输入用户名密码了.不经意间用IE10打开淘宝,登录时发现无法使用快速登录,一番研究后发现,IE做了保护 ...

  5. BZOJ3669/UOJ3 魔法森林(LCT)

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  6. D3.js学习笔记(二)——使用绑定在DOM上的数据

    简单例子 在这个例子中,你将会使用D3.js来将数据绑定到DOM元素上.然后再使用D3.js利用绑定到DOM元素上的数据来更新网页. 在上一章中,我们以下面这个页面作为开始的: <!DOCTYP ...

  7. SeekBar拖动条控件

    SeekBar拖动条控件 一.简介 1. 二.SeekBar拖动条控件使用方法 1.创建SeekBar控件 <SeekBar android:id="@+id/SeekBar1&quo ...

  8. 51nod 1326 奇妙的spfa+dp

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1326 1326 遥远的旅途 题目来源: TopCoder 基准时间限制: ...

  9. Java基础摘要(一)

    三大特性 封装 所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏.封装是面向对象的特征之一,是对象和类概念的主要特性.简单的说,一 ...

  10. react privateRoute

    import React from 'react'; import PropTypes from 'prop-types'; import {Route,Redirect,withRouter} fr ...