实现页面侧滑的两种方式GestureDetector和ViewPager

页面侧滑的功能在Android的APP里面应用越来越广泛,最近几天也在弄一个APP里面有要实现侧滑功能,下面就通过这两种方法来实现一下。

1.通过GestureDetector来实现此功能,由于现在手机版本更新速度太快,由于SDK17版本把GestureDetector的手势侧滑功能阉割掉了。但是只要手动导入

import android.view.GestureDetector.SimpleOnGestureListener;包还是可以实现的下面直接贴出代码。

用一个基类实现代码跳转的方法,这样可以很好的简化代码。

<pre name="code" class="java">package com.lanzhu1933.mobilesafe;

import android.app.Activity;
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;
import android.widget.Toast;

public abstract class BaseSetupActivity extends Activity {
	//手势识别器
	private GestureDetector detector;
	protected SharedPreferences sp;
		

	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		sp = getSharedPreferences("config", MODE_PRIVATE);
		//2.实例化这个手势识别器
		detector = new GestureDetector(BaseSetupActivity.this, new SimpleOnGestureListener(){
			/**
			 * 当我们手指在上面滑动的时候回调
			 */
			@Override
			public boolean onFling(MotionEvent e1, MotionEvent e2,
					float velocityX, float velocityY) {
				
				//屏蔽在X滑动很慢的情
				if(Math.abs(velocityX)<100){
					Toast.makeText(getApplicationContext(), "滑动得太慢了", 0).show();
					return true;
				}
				//屏蔽斜划
				if(Math.abs((e2.getRawY()- e1.getRawY()))>100){
					Toast.makeText(getApplicationContext(), "不能这样划", 1).show();
					return true;			
				}
			
				if((e2.getRawX()- e1.getRawX())>200){
					showPre();
					return true;

					
				}
				if((e1.getRawX()- e2.getRawX())>200){
					//显示下一个页面
					showNext();
					return true;
					
				}
				return super.onFling(e1, e2, velocityX, velocityY);
			}


		});
	}
	
	protected  abstract void showNext() ;
	protected  abstract void showPre() ;
	
	
	public void next(View view ){
		showNext();

	}
	
	public void previous(View view ){
		showPre() ;
	}
		
	//3.使用手势识别器
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		detector.onTouchEvent(event);
		return super.onTouchEvent(event);
	}
}

 
<pre name="code" class="java">package com.lanzhu1933.mobilesafe;


import android.content.Intent;
import android.os.Bundle;
import android.view.GestureDetector;

public class Setup1Activity extends BaseSetupActivity {
	
	protected static final String TAG = "Setup1Activity";
	//手势识别器
	private GestureDetector detector;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_setup1);

	}

	@Override
	protected void showNext() {
		Intent intent = new Intent(this,Setup2Activity.class);
		startActivity(intent);
		finish();
		//该方法要在finish();和startActivity后执行
		overridePendingTransition(R.anim.tran_in, R.anim.tran_out);
		
	}

	@Override
	protected void showPre() {
		
	}

}


 
<pre name="code" class="java">package com.lanzhu1933.mobilesafe;

import com.lanzhu1933.mobilesafe.ui.SettingItemView;

import android.content.Intent;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class Setup2Activity extends BaseSetupActivity {

	private SettingItemView siv_setup2_sim;
	/**
	 * 读取手机SIM的信息
	 */
	private TelephonyManager tm;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_setup2);
		tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
		siv_setup2_sim = (SettingItemView) findViewById(R.id.siv_setup2_sim);
		
		String sim = sp.getString("sim", null);
		if(TextUtils.isEmpty(sim)){//如果勾选,既已经绑定
			siv_setup2_sim.setChecked(false);
		}else{//没有勾选就没有绑定
			siv_setup2_sim.setChecked(true);
		}
		siv_setup2_sim.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				String sim  = tm.getSimSerialNumber();
				Editor editor	= sp.edit();
				if(siv_setup2_sim.isChecked()){
					siv_setup2_sim.setChecked(false);
					/**
					 * 得到Sim序列号
					 */
					editor.putString("sim", null);
					editor.commit();
				}else{
					siv_setup2_sim.setChecked(true);
				/**
				 * 得到Sim序列号
				 */
				editor.putString("sim", sim);
				editor.commit();
			}
			}
		});
	}

	@Override
	protected void showNext() {
		//取出是否绑定SIM卡
		String sim = sp.getString("sim", null);
		if(TextUtils.isEmpty(sim)){
			Toast.makeText(this, "请勾选绑定SIM卡", 1).show();
			return;
			
		}
		Intent intent = new Intent(this, Setup3Activity.class);
		startActivity(intent);
		finish();
		overridePendingTransition(R.anim.tran_in, R.anim.tran_out);

	}

	@Override
	protected void showPre() {
		Intent intent = new Intent(this, Setup1Activity.class);
		startActivity(intent);
		finish();
		overridePendingTransition(R.anim.tran_pre_in, R.anim.tran_pre_out);

	}

}


 
package com.lanzhu1933.mobilesafe;

import android.content.Intent;
import android.os.Bundle;

public class Setup3Activity extends BaseSetupActivity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_setup3);
	}
	
	@Override
	protected void showNext() {
		Intent intent = new Intent(this,Setup4Activity.class);
		startActivity(intent);
		finish();
		overridePendingTransition(R.anim.tran_in, R.anim.tran_out);
		
	}

	@Override
	protected void showPre() {
		Intent intent = new Intent(this,Setup2Activity.class);
		startActivity(intent);
		finish();
		overridePendingTransition(R.anim.tran_pre_in, R.anim.tran_pre_out);
		
	}

}
界面4
package com.lanzhu1933.mobilesafe;

import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;


public class Setup4Activity extends BaseSetupActivity {
	
	private SharedPreferences sp;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_setup4);
		sp = getSharedPreferences("config", MODE_PRIVATE);
	}

	
	@Override
	protected void showNext() {
		Editor editor = sp.edit();
		editor.putBoolean("configed", true);
		editor.commit();
		Intent intent = new Intent(this,LostFindActivity.class);
		startActivity(intent);
		finish();
		overridePendingTransition(R.anim.tran_in, R.anim.tran_out);
		
	}
	@Override
	protected void showPre() {
		Intent intent = new Intent(this,Setup3Activity.class);
		startActivity(intent);
		finish();
		overridePendingTransition(R.anim.tran_pre_in, R.anim.tran_pre_out);
		
	}

}

2.Viewpager实现侧滑

package com.lanzhu1994;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;

public class Viewpager extends Activity {

	private static final String TAG = "ViewPager";
	ViewPager mViewPager;
	private ImageView imageView;
	private ImageView[] imageViews;
	private Button button;
	private ArrayList<View> pageViews;
	// 包裹小圆点的LinearLayout
	private ViewGroup group;
	// 导航页图片资源
	public int[] guides = new int[] { R.drawable.guidepage1,
			R.drawable.guidepage2, R.drawable.guidepage3, R.drawable.guidepage4 };

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);// 设置无标题
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);// 去掉信息栏
		setContentView(R.layout.viewpager);
		mViewPager = (ViewPager) findViewById(R.id.viewFlipper);
		button = (Button) findViewById(R.id.button1);
		group = (ViewGroup) findViewById(R.id.viewGroup);
		imageViews = new ImageView[guides.length];
		initWithPageGuideMode();
	}

	/**
	 * 程序导航页效果
	 */
	public void initWithPageGuideMode() {

		List<View> mList = new ArrayList<View>();
		LayoutInflater inflat = LayoutInflater.from(this);
		// 先添加一个最左侧空的view
		View item = inflat.inflate(R.layout.pageguide, null);	
		for (int i = 0; i < guides.length; i++) {	
			LinearLayout layout = new LinearLayout(this);
			LayoutParams ltp = new LayoutParams(LayoutParams.MATCH_PARENT,
					LayoutParams.MATCH_PARENT);
			item = inflat.inflate(R.layout.pageguide, null);
			item.setBackgroundResource(guides[i]);
			layout.addView(item, ltp);
			mList.add(layout);
			Log.v(TAG,"输出图片的I的值:"+i+"------>");
		}

		/**
		 * 添加导航页小圆圈
		 */
		imageViews = new ImageView[mList.size()];
		for (int i = 0; i < mList.size(); i++) {
			LinearLayout.LayoutParams margin = new LinearLayout.LayoutParams(
					LinearLayout.LayoutParams.WRAP_CONTENT,
					LinearLayout.LayoutParams.WRAP_CONTENT);
			//设置每个小圆点距离左边的间距
			margin.setMargins(20, 0, 0, 0);
			imageView = new ImageView(Viewpager.this);
			//设置每个小圆点的宽高
			imageView.setLayoutParams(new LayoutParams(15, 15));
			imageViews[i] = imageView;
			if (i==0) {
				// 默认选中第一张图片
				imageViews[i]
						.setBackgroundResource(R.drawable.page_indicator_focused);
			} else {
				//其他图片都设置未选中状态
				imageViews[i]
						.setBackgroundResource(R.drawable.page_indicator_unfocused);
			}
			group.addView(imageViews[i], margin);
		}
		
		// 经过遍历,此时item是最后一个view,设置button
		Button btn = (Button) item.findViewById(R.id.button1);
		btn.setVisibility(View.VISIBLE);
		// btn.setOnClickListener(this),设置最后一个页面上button的监听
		btn.setOnClickListener(new View.OnClickListener() {	
			@Override
			public void onClick(View v) {
				Intent intent = new Intent();
				intent.setClass(Viewpager.this, MainActivity.class);
				startActivity(intent);
			}
		});
		// ViewPager最重要的设置Adapter,这和ListView一样的原理
		MViewPageAdapter adapter = new MViewPageAdapter(mList);
		mViewPager.setAdapter(adapter);
		mViewPager.setOnPageChangeListener(adapter);
		mViewPager.setCurrentItem(1);

	}

	/**
	 * 内部类,继承PagerAdapter,当然你也可以直接 new PageAdapter
	 * 
	 * @author zych
	 * 
	 */
	class MViewPageAdapter extends PagerAdapter implements OnPageChangeListener {

		private List<View> mViewList;

		public MViewPageAdapter(List<View> views) {
			mViewList = views;
		}

		@Override
		public int getCount() {
			return mViewList.size();
		}

		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {

			return arg0 == arg1;
		}

		@Override
		public Object instantiateItem(ViewGroup container, int position) {
			container.addView(mViewList.get(position), 0);
			return mViewList.get(position);
		}

		@Override
		public void destroyItem(ViewGroup container, int position, Object object) {
			container.removeView(mViewList.get(position));
		}

		@Override
		public void onPageScrollStateChanged(int arg0) {

		}

		@Override
		public void onPageScrolled(int arg0, float arg1, int arg2) {

		}

		@Override
		public void onPageSelected(int position) {

//			if (position == 0) {
//				mViewPager.setCurrentItem(1);
//			} else if (position == mViewList.size() - 1) {
//				mViewPager.setCurrentItem(position - 1);
//				Toast.makeText(getApplicationContext(), "页面即将跳转",
//						Toast.LENGTH_SHORT).show();
//				// 应该在这里跳转到MainActivity
//				// startActivity(intent);
//			}
			//遍历数组让当前选中图片下的小圆点设置颜色
			for (int i = 0; i < imageViews.length; i++) {
				imageViews[position]
						.setBackgroundResource(R.drawable.page_indicator_focused);

				if (position != i) {
					imageViews[i]
							.setBackgroundResource(R.drawable.page_indicator_unfocused);
				}
			}

		}

	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值