Safe-导航滑动页面
来源:互联网 发布:怎么改淘宝会员名手机 编辑:程序博客网 时间:2024/06/05 10:55
很多时候刚安装apk会出出现一个导航页,导航页可以实现左右滑动,切换等等操作,主要是引导一些设置,这种设置很受欢迎。
这个里面是在一个设置页面上面实现的,直接跳转activity的方式来切换导航.因为只需要一次导航,所以可以使用SharePreference中保存某一个flag来确定是不是要进行导航。由于很多导航是一样的操作,因此可以弄一个BaseActivity,这个activity不需要节面,将一些方法封装,然后通过抽象类来让子类去实现这些方法
入口页面LostAndFind.java
package com.ldw.safe.Activity;import android.app.Activity;import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.view.View;import android.widget.ImageView;import android.widget.TextView;import com.ldw.safe.R;/* * 手机防盗页面 */public class LostAndFind extends Activity {private SharedPreferences mPref;private TextView tvSafePhone;private ImageView ivProtect;@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //判断是否是第一次登陆,第一次登陆会进入设置向导 mPref = getSharedPreferences("config", MODE_PRIVATE); boolean configed = mPref.getBoolean("configed", false); if(configed){ //进入手机放到主页面 setContentView(R.layout.activity_lostfind); //从mPref中获取到安全号码 tvSafePhone = (TextView) findViewById(R.id.tv_safe_phone); String phone = mPref.getString("safe_phone", ""); tvSafePhone.setText(phone); //从mPref中获取是否是开启保护的状态,来选择后面的图片是开启还是关闭 ivProtect = (ImageView) findViewById(R.id.iv_protect); boolean protect = mPref.getBoolean("protect", false); if(protect){ ivProtect.setImageResource(R.drawable.lock); }else{ ivProtect.setImageResource(R.drawable.unlock); } }else{ //跳转到设置向导页 startActivity(new Intent(LostAndFind.this, Setup1Activity.class)); finish(); } } /* * 重新进入设置向导 */ public void reEnter(View v){ startActivity(new Intent(LostAndFind.this, Setup1Activity.class)); finish(); }}布局页面activity_lostfind.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView style="@style/TitleStyle" android:text="手机防盜" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView style="@style/ContentStyle" android:text="安全号码" /> <TextView android:id="@+id/tv_safe_phone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_marginRight="5dp" android:layout_centerVertical="true" android:textSize="20sp" android:textColor="@color/black"/> </RelativeLayout><ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="5dp" android:background="@drawable/listview_divider" /><RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView style="@style/ContentStyle" android:text="防盗保护是否开启" /> <ImageView android:id="@+id/iv_protect" android:layout_width="20dp" android:layout_height="20dp" android:layout_alignParentRight="true" android:layout_marginRight="5dp" android:layout_centerVertical="true" android:src="@drawable/lock" /> </RelativeLayout><ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="5dp" android:background="@drawable/listview_divider" /><TextView style="@style/ContentStyle" android:layout_width="match_parent" android:layout_marginRight="5dp" android:onClick="reEnter" android:clickable="true" android:background="@drawable/shape_selector" android:text="重新进入设置向导" /><ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="5dp" android:background="@drawable/listview_divider" /> <TextView android:background="#885500" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="功能简介" android:textSize="20sp" android:textColor="@color/black" android:layout_marginRight="5dp" android:layout_marginLeft="5dp" android:layout_marginTop="5dp" android:padding="3dp" /> <TextView style="@style/ContentStyle" android:drawableLeft="@android:drawable/star_big_on" android:layout_gravity="center" android:text="GPS跟踪#*Location*#" /> <TextView style="@style/ContentStyle" android:drawableLeft="@android:drawable/star_big_on" android:layout_gravity="center" android:text="播放报警音乐#*alarm*#" /> <TextView style="@style/ContentStyle" android:drawableLeft="@android:drawable/star_big_on" android:layout_gravity="center" android:text="远程删除数据#*wipedata*#" /> <TextView style="@style/ContentStyle" android:drawableLeft="@android:drawable/star_big_on" android:layout_gravity="center" android:text="远程锁屏#*lookscreen*#" /></LinearLayout>下面的是几个切换的特效页面
Setup1Activity.java
package com.ldw.safe.Activity;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import com.ldw.safe.R;/* * 手机防盗第一个设置向导页面 */public class Setup1Activity extends BaseSetupActivity {@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_setup1);}//显示下一页,这个需要子类去实现,跳转的页面不是固定的public void showNext(){//页面跳转startActivity(new Intent(Setup1Activity.this, Setup2Activity.class));//销毁当前页面finish();//两个界面的切换动画overridePendingTransition(R.anim.tran_in, R.anim.tran_out);//进入动画和推出动画}//没有上一页,什么都不做@Overridepublic void showPrevious() {// TODO Auto-generated method stub}}Setup2Activity.java
package com.ldw.safe.Activity;import android.app.Activity;import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.telephony.TelephonyManager;import android.text.TextUtils;import android.view.GestureDetector;import android.view.GestureDetector.SimpleOnGestureListener;import android.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;import android.widget.Toast;import com.ldw.safe.R;import com.ldw.safe.view.SettingItemView;/* * 手机防盗第二个设置向导页面 */public class Setup2Activity extends Activity {public SharedPreferences mPref;private GestureDetector mDector;private SettingItemView siv_sim;@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_setup2); mPref = getSharedPreferences("config", MODE_PRIVATE); //创建手势识别器 mDector = new GestureDetector(this, new SimpleOnGestureListener(){ //监听手势滑动动作,e1是滑动的起始点,e2是滑动的终点。后2个参数是X,Y速度 @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY){ //获取到相对于屏幕的相对坐标,设置最小的滑动距离 //向右滑动,上一页 if((e2.getRawX() - e1.getRawX()) > 200){ showPrevious(); return true; } //向左滑动,下一页 if((e1.getRawX() - e2.getRawX()) > 200){ showNext(); return true; } return super.onFling(e1, e2, velocityX, velocityY); } }); //监听sim卡 siv_sim = (SettingItemView) findViewById(R.id.siv_sim); //看一下存储的值来设置是否选中 String sim = mPref.getString("sim", null); if(!TextUtils.isEmpty(sim)){ siv_sim.setChecked(true); }else{ siv_sim.setChecked(false); } siv_sim.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {if(siv_sim.isChecked()){siv_sim.setChecked(false);//解绑sim卡的序列号mPref.edit().remove("sim").commit();}else{siv_sim.setChecked(true);//保存sim卡信息//读取sim卡的序列号TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);String simSerialNumber = tm.getSimSerialNumber();//获取到序列号System.out.println("sim卡序列号" + simSerialNumber);//保存sim卡的序列号mPref.edit().putString("sim", simSerialNumber).commit();}} });}//显示上一页public void showPrevious(){//页面跳转startActivity(new Intent(Setup2Activity.this, Setup1Activity.class));//销毁当前页面finish();//两个界面的切换动画overridePendingTransition(R.anim.tran_previous_in, R.anim.tran_previous_out);//进入动画和推出动画}//显示下一页public void showNext(){//如果sim卡没有绑定就不让进入下一页String sim = mPref.getString("sim", null); if(TextUtils.isEmpty(sim)){ Toast.makeText(this, "sim卡没有绑定", Toast.LENGTH_SHORT).show(); return; }//页面跳转startActivity(new Intent(Setup2Activity.this, Setup3Activity.class));//销毁当前页面finish();//两个界面的切换动画overridePendingTransition(R.anim.tran_in, R.anim.tran_out);//进入动画和推出动画}//点击按钮跳转到下一页public void next(View v){showNext();/*//页面跳转startActivity(new Intent(Setup2Activity.this, Setup3Activity.class));//销毁当前页面finish();//两个界面的切换动画overridePendingTransition(R.anim.tran_in, R.anim.tran_out);//进入动画和推出动画*/}//点击按钮跳转到上一页public void previous(View v){showPrevious();/*//页面跳转startActivity(new Intent(Setup2Activity.this, Setup1Activity.class));//销毁当前页面finish();//两个界面的切换动画overridePendingTransition(R.anim.tran_previous_in, R.anim.tran_previous_out);//进入动画和推出动画*/}//处理手势滑动页面的处理,委托给GestureDetector手势识别器处理@Overridepublic boolean onTouchEvent(MotionEvent event){//手势识别器进行处理mDector.onTouchEvent(event);return super.onTouchEvent(event);}}Setup3Activity.java
package com.ldw.safe.Activity;import android.app.Activity;import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.text.TextUtils;import android.view.View;import android.widget.EditText;import android.widget.Toast;import com.ldw.safe.R;/* * 手机防盗第三个设置向导页面 */public class Setup3Activity extends BaseSetupActivity {private EditText etPhone;@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_setup3); etPhone = (EditText) findViewById(R.id.et_phone); String phone = mPref.getString("safe_phone", ""); etPhone.setText(phone);}//显示上一页,这个需要子类去实现,跳转的页面不是固定的public void showPrevious(){//页面跳转startActivity(new Intent(Setup3Activity.this, Setup2Activity.class));//销毁当前页面finish();//两个界面的切换动画overridePendingTransition(R.anim.tran_previous_in, R.anim.tran_previous_out);//进入动画和推出动画}//显示下一页,这个需要子类去实现,跳转的页面不是固定的public void showNext(){//判断是否设置安全号码,trim来过滤空格String phone = etPhone.getText().toString().trim();if(TextUtils.isEmpty(phone)){Toast.makeText(this, "安全号码不能是空", Toast.LENGTH_SHORT).show();return;}//保存安全号码mPref.edit().putString("safe_phone", phone).commit();//页面跳转startActivity(new Intent(Setup3Activity.this, Setup4Activity.class));//销毁当前页面finish();//两个界面的切换动画overridePendingTransition(R.anim.tran_in, R.anim.tran_out);//进入动画和推出动画}//选择联系人public void selectContact(View v){//跳转到ContactActivity界面,同时返回数据Intent intent = new Intent(this, ContactActivity.class);startActivityForResult(intent, 0);}@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data){//如果请求码是ok的时候才会去获取回传的数据if(resultCode == Activity.RESULT_OK){String phone = data.getStringExtra("phone");//把电话号码里面的-去掉,并将空格去掉phone = phone.replaceAll("-", "").replaceAll(" ", "");//把返回的电话号码设置到输入框etPhone.setText(phone);//}super.onActivityResult(requestCode, resultCode, data);}}Setup4Activity.java
package com.ldw.safe.Activity;import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.CompoundButton.OnCheckedChangeListener;import com.ldw.safe.R;/* * 手机防盗第四个设置向导页面 */public class Setup4Activity extends BaseSetupActivity {private CheckBox cbProtect;@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_setup4); cbProtect = (CheckBox) findViewById(R.id.cb_protect); //根据保存的状态保存是否开启 boolean protect = mPref.getBoolean("protect", false); if(protect){ cbProtect.setText("防盗保护已经开启"); cbProtect.setChecked(true); }else{ cbProtect.setText("防盗保护没有开启"); cbProtect.setChecked(false); } //监听checkBox,并保存checkbox状态 cbProtect.setOnCheckedChangeListener(new OnCheckedChangeListener(){@Overridepublic void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {if(isChecked){cbProtect.setText("防盗保护已经开启");mPref.edit().putBoolean("protect", true).commit();}else{cbProtect.setText("防盗保护没有开启");mPref.edit().putBoolean("protect", false).commit();}} });}//显示上一页,这个需要子类去实现,跳转的页面不是固定的public void showPrevious(){//页面跳转startActivity(new Intent(Setup4Activity.this, Setup3Activity.class));//销毁当前页面finish();//两个界面的切换动画overridePendingTransition(R.anim.tran_previous_in, R.anim.tran_previous_out);//进入动画和推出动画}//显示下一页,这个需要子类去实现,跳转的页面不是固定的public void showNext(){//页面跳转startActivity(new Intent(Setup4Activity.this, LostAndFind.class));//销毁当前页面finish();//更新mPref表示已经展示过设置向导,下次进来不展示更新向导mPref.edit().putBoolean("configed", true).commit();//两个界面的切换动画overridePendingTransition(R.anim.tran_in, R.anim.tran_out);//进入动画和推出动画}}公共activity==BaseActivity.jav
package com.ldw.safe.Activity;import com.ldw.safe.R;import android.app.Activity;import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.view.GestureDetector;import android.view.MotionEvent;import android.view.View;import android.view.GestureDetector.SimpleOnGestureListener;/* * 设置引导页面的父类,这个基类不需要在Manifist文件中注册,因为其不需要展示 * 里面有抽象方法,类设置成抽象类 */public abstract class BaseSetupActivity extends Activity {public SharedPreferences mPref;private GestureDetector mDector;@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_setup2); mPref = getSharedPreferences("config", MODE_PRIVATE); //创建手势识别器 mDector = new GestureDetector(this, new SimpleOnGestureListener(){ //监听手势滑动动作,e1是滑动的起始点,e2是滑动的终点。后2个参数是X,Y速度 @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY){ //防止上滑动和下滑动幅度过大,不让切换 if(Math.abs(e2.getRawY() - e1.getRawY()) > 200){ return true; } //滑动的速度不能太慢 if(Math.abs(velocityX) < 100){ return true; } //获取到相对于屏幕的相对坐标,设置最小的滑动距离 //向右滑动,上一页 if((e2.getRawX() - e1.getRawX()) > 200){ showPrevious(); return true; } //向左滑动,下一页 if((e1.getRawX() - e2.getRawX()) > 200){ showNext(); return true; } return super.onFling(e1, e2, velocityX, velocityY); } });}//显示上一页,这个需要子类去实现,跳转的页面不是固定的,抽象方法,强制子类去实现public abstract void showPrevious();//显示下一页,这个需要子类去实现,跳转的页面不是固定的public abstract void showNext();//点击按钮跳转到下一页public void next(View v){showNext();/*//页面跳转startActivity(new Intent(Setup2Activity.this, Setup3Activity.class));//销毁当前页面finish();//两个界面的切换动画overridePendingTransition(R.anim.tran_in, R.anim.tran_out);//进入动画和推出动画*/}//点击按钮跳转到上一页public void previous(View v){showPrevious();/*//页面跳转startActivity(new Intent(Setup2Activity.this, Setup1Activity.class));//销毁当前页面finish();//两个界面的切换动画overridePendingTransition(R.anim.tran_previous_in, R.anim.tran_previous_out);//进入动画和推出动画*/}//处理手势滑动页面的处理,委托给GestureDetector手势识别器处理@Overridepublic boolean onTouchEvent(MotionEvent event){//手势识别器进行处理mDector.onTouchEvent(event);return super.onTouchEvent(event);}}
阅读全文
0 0
- Safe-导航滑动页面
- 滑动导航栏+滚动页面
- Safe-滑动页面(Setup2Activity)-手势识别器
- Android滑动页面导航效果: PagerSlidingTabStrip
- Android代码库-ViewPager滑动导航页面
- Android滑动页面导航效果: PagerSlidingTabStrip
- Android滑动页面导航效果: PagerSlidingTabStrip
- 指定页面页面导航隐藏并开启页面滑动返回
- Android ViewPager多页面滑动切换以及底部滑动导航
- 滑动导航
- 导航滑动
- android-整体UI设计-(滑动导航栏+滚动页面)
- android-整体UI设计-(滑动导航栏+滚动页面)
- android-整体UI设计-(滑动导航栏+滚动页面)
- android-整体UI设计-(滑动导航栏+滚动页面)
- android-整体UI设计-(滑动导航栏+滚动页面)
- android-整体UI设计-(滑动导航栏+滚动页面)
- android-整体UI设计-(滑动导航栏+滚动页面)
- Vue props用法总结
- cms收集器
- 反射和特性-Assembly程序集类
- 关于博客的几点说明
- Qt 5.9解决界面修改控件名称不生效的问题
- Safe-导航滑动页面
- Slim研读笔记六之应用主体(上)
- SpringMVC@ResponseBody返回JSON乱码
- MAC解决Unable to load native-hadoop library for your platform
- 【已解决】【VMware】无法连接 MKS: 套接字连接尝试次数太多;正在放弃。
- 关于公司客户端部门的几点想法
- Docker 1分钟搭建DNS服务器
- 彻底解决中文乱码问题
- CUDA 数据分为大小两组