博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android中的基类—抽取出来公共的方法
阅读量:6435 次
发布时间:2019-06-23

本文共 3023 字,大约阅读时间需要 10 分钟。

在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

你可能感兴趣的文章
PHP面向对象之接口编程
查看>>
使用 Docker Compose 管理多个容器实例
查看>>
ThinkPHP 删除数据记录 delete 方法
查看>>
Gradle学习笔记(二)--创建Java项目
查看>>
IntelliJ IDEA 快捷键
查看>>
qury-easyui DataGrid 整合struts2增删查该入门实例(三)
查看>>
if a point is inside a square with mathematics
查看>>
Ubuntu(Linux)使用Eclipse搭建C/C++编译环境
查看>>
skyline无插件web的数据加载解析
查看>>
python基础学习第一天
查看>>
硬盘存储双寡头之争 希捷重注中国市场或赢大丰收
查看>>
编译安装PHP
查看>>
css position:static 的使用
查看>>
nfs永久挂载与临时挂载
查看>>
linux查看网络链接状况命令之-netstat
查看>>
我的友情链接
查看>>
UIView的layoutSubviews和drawRect方法何时调用
查看>>
mysql主从同步
查看>>
制作最简化的Linux系统
查看>>
我的友情链接
查看>>