Safe-导航滑动页面

很多时候刚安装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);//进入动画和推出动画
	}

	//没有上一页,什么都不做
	@Override
	public 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(){

			@Override
			public 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手势识别器处理
	@Override
	public 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);
	}
	
	@Override
	public 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(){

			@Override
			public 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手势识别器处理
		@Override
		public boolean onTouchEvent(MotionEvent event){
			//手势识别器进行处理
			mDector.onTouchEvent(event);
			return super.onTouchEvent(event);
			
		}
	
	

}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值