连接之前的学习
可以发现四个导航也有一些相同的地方
至少后三个导航页有一些相同的地方
1,都有一个标题栏
2,都有四个横排的灯
3,都有上一步下一步(最后一个是上一步和设置完成)
4,从代码上 都需要使用SharePerferences
5,如果实现滑动触发则都需要一样的前后滑动触发
所以我们可以写出一个父类导航页然后继承之
第一步
BaseStepActivity
/**
* Created by admin on 2016/5/15.
* 设置引导页的基类,不需要再清单文件中注册,因为该页面不需要界面展示
*/
public abstract class BaseSetupActivity extends AppCompatActivity {
//手势识别器
private GestureDetector mDetector;//初始化手势识别器
public SharedPreferences mPref; //SharePerferences实例化
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPref=getSharedPreferences("config",MODE_PRIVATE);
mDetector = new GestureDetector(this,
new GestureDetector.SimpleOnGestureListener() {
/*
* e1表示滑动的起点,e2表示滑动的终点
* velocityX表示水平速度
* velocityY表示垂直速度
* */
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
//判断纵向滑动是否幅度过大,过大的话不允许切换界面
if(Math.abs(e2.getRawY()-e1.getRawY())>100){
Toast.makeText(BaseSetupActivity.this, "不能这样划哦~", Toast.LENGTH_SHORT).show();
return true;
}
if(Math.abs(velocityX)<100){
Toast.makeText(BaseSetupActivity.this, "滑动的太慢哦~", Toast.LENGTH_SHORT).show();
return true;
}
//向右滑动,上一页
if (e2.getRawX() - e1.getRawX() > 200) {
showPreviousPage();
return true;
}
//向左滑动,下一页
if (e1.getRawX() - e2.getRawX() > 200) {
showNextPage();
return true;
}
return super.onFling(e1, e2, velocityX, velocityY);
}
});
}
/*
* 展示下一页,子类必须实现
* */
public abstract void showPreviousPage();
/*
* 展示上一页,子类必须实现
* */
public abstract void showNextPage();
/*
委托手势识别器处理触摸事件
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
mDetector.onTouchEvent(event);
return super.onTouchEvent(event);
}
/*
* 鼠标点击下一页按钮
* */
public void next(View view) {
showNextPage();
}
/*
* 鼠标点击上一页按钮
* */
public void previous(View view) {
showPreviousPage();
}
}
这里BaseSetupActivity涵盖了所有的相同点
这里留出了两个方法分别是showNextPage()和showPreviousPage()
因为在导航界面中涉及到具体的跳转还有一些判定这样可以自己来填写
每一个页面跳转的next页面也不一样
然后让三个导航页分别取继承
第一个页面也可以继承
只需要showPreviousPage()方法不填写就可以
举个例子
高亮的是需要自行填写的
/**
* Created by admin on 2016/5/15.
* 第二个设置向导页
*/
public class Setup2Activity extends BaseSetupActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.setup2_activity);
final SettingItemView sivSim= (SettingItemView) findViewById(R.id.siv_sim);
String sim=mPref.getString("sim",null);//使用SharePerferences
if(!TextUtils.isEmpty(sim)){
sivSim.setChecked(true);
}else{
sivSim.setChecked(false);
}
sivSim.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(sivSim.isChecked()){
sivSim.setChecked(false);
mPref.edit().remove("sim").commit();//删除已绑定的SIM卡
Toast.makeText(Setup2Activity.this, "已解除SIM卡绑定", Toast.LENGTH_SHORT).show();
}else{
sivSim.setChecked(true);
//保存sim卡信息
TelephonyManager tm= (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
String simSerialNumber=tm.getSimSerialNumber();
Toast.makeText(Setup2Activity.this, "sim卡序列号为:"+simSerialNumber, Toast.LENGTH_SHORT).show();;
mPref.edit().putString("sim",simSerialNumber).commit();//将SIM卡序列号保存在SP中
}
}
});
}
public void showPreviousPage() {
startActivity(new Intent(this, Setup1Activity.class));
finish();
//两个界面切换的动画
overridePendingTransition(R.anim.previous_in, R.anim.previous_out);//进入动画和退出动画
}
public void showNextPage() {
//如果sim卡没有绑定就不允许进入下一个页面
String sim=mPref.getString("sim",null);
if(TextUtils.isEmpty(sim)){
Toast.makeText(Setup2Activity.this, "必须绑定sim卡", Toast.LENGTH_SHORT).show();
return;
}
startActivity(new Intent(this, Setup3Activity.class));
finish();
//两个界面切换的动画
overridePendingTransition(R.anim.tran_in, R.anim.tran_out);//进入动画和退出动画
}
}