2025-07-08

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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *