86.android页面滑动,利用手势识别器

来源:互联网 发布:照片管理 nas windows 编辑:程序博客网 时间:2024/06/06 00:29
手势滑动和点击事件有一些不一样,可以先创建GestureDetector mDector手势识别器,再通过对onTouchEvent的监听,进行处理手势的动作,根据相对于屏幕坐标的移动判断移动到上一页还是下一页。Setup2Activity.java
package com.ldw.safe.Activity;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.GestureDetector;import android.view.GestureDetector.SimpleOnGestureListener;import android.view.MotionEvent;import android.view.View;import com.ldw.safe.R;/* * 手机防盗第二个设置向导页面 */public class Setup2Activity extends Activity {private GestureDetector mDector;@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_setup2);                //创建手势识别器        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);        }        });}//显示上一页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(){//页面跳转startActivity(new Intent(Setup2Activity.this, Setup3Activity.class));//销毁当前页面finish();//两个界面的切换动画overridePendingTransition(R.anim.tran_in, R.anim.tran_out);//进入动画和推出动画}//点击按钮跳转到下一页public void next(View v){/*//页面跳转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);}}
收拾移动可以用到很多页面,针对这个,在每一个页面上添加这个太麻烦,因此,当在移动端设计的时候需要创建一个基类,从基类中继承基类的方法,主要的方法在基类中实现,不同的方法在基类中创建一个抽象方法,然后让所有的子类去实现。基类实现了按钮点击的上一页和下一页的方法,以及初始化了抽象方法给子类去实现
基类BaseSetupActivity.java
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){/*//页面跳转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);}}

activity使用基类的方法Setup3Activity.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 Setup3Activity extends BaseSetupActivity {@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_setup3);}//显示上一页,这个需要子类去实现,跳转的页面不是固定的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(){//页面跳转startActivity(new Intent(Setup3Activity.this, Setup4Activity.class));//销毁当前页面finish();//两个界面的切换动画overridePendingTransition(R.anim.tran_in, R.anim.tran_out);//进入动画和推出动画}}


0 0
原创粉丝点击