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

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

界面统一管理原因

  1. 当应用中的界面达到一定数量级时,如几十个界面,便于项目管理
  2. 提高界面的处理速度
  3. 避免由于多Activity导致的问题

界面统一管理的基础
当应用中的界面达到一定数量级时,为了能够让用户更容易操作上手,产品设计时会将界面显示风格进行统一。

案例驱动:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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);
      }
 
  }

分析:
案例中主要实现的就是在同一主题下的页面的切换效果进行统一,初始化了手势识别器,并且让手势识别器生效。接下来看一下继承自这个基类的一个页面的设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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://jackyonline.org/archives/152,欢迎点评和留言。如果有不妥之处,欢迎指教~

转载于:https://www.cnblogs.com/Jacky-Fight/p/3621929.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值