Android中的基類—抽取出來公共的方法

在Android中,通常來講一個應用會存在幾十個頁面,而且一個應用通常也會使用一個特定的主題,其中的頁面的風格也是一致的,而且頁面中的動畫效果、頁面的切換效果等也應該保持一樣的風格,那麼就須要一個基類,來完成頁面的基礎設置,這就是所謂的基類。java

界面統一管理緣由
ide

  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);
      }
 
  }

分析:
案例中主要實現的就是在同一主題下的頁面的切換效果進行統一,初始化了手勢識別器,而且讓手勢識別器生效。接下來看一下繼承自這個基類的一個頁面的設置this

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()中沒有寫任何的內容是由於沒有上一頁。spa

也歡迎你們來本文首發地址:http://jackyonline.org/archives/152,歡迎點評和留言。若是有不妥之處,歡迎指教~設計

相關文章
相關標籤/搜索