zoukankan      html  css  js  c++  java
  • Android中的基类—抽取出来公共的方法

    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
  • 相关阅读:
    (九十三)蓝牙的基本使用
    (九十二)加速计的用法(过期方法+新方法)
    (九十一)距离传感器的使用
    1060. Are They Equal (25)
    (九十)使用多个storyboard+代码实现控制器的分开管理
    (八十九)用AutoLayout实现动画和Label根据内容自动调整
    HDU 2013:蟠桃记
    HDU 2050:折线分割平面
    HDU 2042:不容易系列之二
    HDU 1465:不容易系列之一
  • 原文地址:https://www.cnblogs.com/antyi/p/3921860.html
Copyright © 2011-2022 走看看