android右滑返回上一个界面

  咳咳,又到了装逼时刻,试问,天下英雄,人生何处不装逼.....

一看标题,多么明显,多么大气,告诉我,你懂了吗?.....OK,放下你们手中的刀,我保证认真写...

现在特么的各种功能都要仿ios,仿仿仿,就特么知道仿,仿你大爷仿....

好了,我开始了,首先,这个功能的实现目测是 全局都要的,所以,我们写一个baseactivity,



public class BaseActivity extends Activity implements OnTouchListener {

	public ProgressDialog progressDialog;
	public String states;
	public RequestQueue mQueue;

	/** 触摸时按下的点 **/
	PointF downP = new PointF();
	/** 触摸时当前的点 **/
	PointF curP = new PointF();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.requestWindowFeature(Window.FEATURE_NO_TITLE);


	}

	@Override
	protected void onResume() {
		super.onResume();
	}

	
	@Override
	public boolean onTouchEvent(MotionEvent event) {


		
		curP.x = event.getX();
		switch (event.getAction()) {
		
		
		case MotionEvent.ACTION_DOWN:

			downP.x = event.getX();
		
			break;
		case MotionEvent.ACTION_MOVE:


			if (curP.x- downP.x > 500) {
				Log.i("TEST", "move-=-=-=--=-");
				finish();
			
			}

			break;
		case MotionEvent.ACTION_UP:

			break;

		default:
			break;
		}
		
		return true;
	}

	@Override
	protected void onPause() {
		super.onPause();
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();

	}

	

}


 
   
  

如上所示,既然要滑动返回上一个界面,我给出的方法是重写onTouchEvent事件,所以我们实现了OnTouchListener 这个接口,

接下来的事情就是,我们要做些什么事呢,没错,就是滑动判断,至于事件 switch 里面的 各个情况对应的是我们对屏幕做了什么样的操作就不解释了,(可以自行百度)如上所示,如果滑动距离超过500像素,就结束当前activity,其实写到这里基本上就没了,但是我怎么可能写这么低端的博客,你们说是不是,好的,重点来了, 

博主帅哥,我现在就是用的你这个方法,但是为毛 scrollview 下的布局,对这个接口无效呢,好的,问的漂亮,我的回答是:我tm哪知道,....

OK,我们看下scrollview 源码:

android右滑返回上一个界面_第1张图片

他喵的,果然重写了这个方法, 根据 view 触碰事件的传递顺序,scrollview会先拦截到事件,所以,我们要做的就是,在不对scrollview本来的拦截事件做改变的情况下,加入我们所需要的需求来满足我们实现功能, 那么就很简答了, 当然是 自己 定义一个view,代码如下:

public class BackScrollView extends ScrollView {

	/** 触摸时按下的点 **/
	PointF downP = new PointF();
	/** 触摸时当前的点 **/
	PointF curP = new PointF();

	public BackScrollView(Context context) {
		super(context);
	}

	public BackScrollView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
	}

	public BackScrollView(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	@Override
	public boolean onTouchEvent(MotionEvent event) {

		curP.x = event.getX();
		switch (event.getAction()) {

		case MotionEvent.ACTION_DOWN:

			downP.x = event.getX();
			Log.i("TEST", "downP.x-=-=-=--=-" + downP.x);
			break;
		case MotionEvent.ACTION_MOVE:
			Log.i("TEST", "downP.x-=-=-=--=-" + curP.x);

			if (downP.x < 200) {

				if (curP.x - downP.x > 500) {

					return false;

				}
			}

			break;
		case MotionEvent.ACTION_UP:

			break;

		default:
			break;
		}
		return super.onTouchEvent(event);
	}

OK,在如上代码中,可以看到我们做了一个判断,当触摸点像素距离屏幕最左边200像素以内时,滑动才有效果,否则执行父类方法,没了? 我仅举这一例子说明可能存在的一些问题,当然,如果布局中也有其它控件出现类似的情况,那么跟 这个一样,自己定义一个view,重写它的 触摸事件,(其实自定义view很简单的,哥刚开始也觉得很难,后来 也就那样....) ,当然,直接finish可能会显得太单一,你们可以充分发挥你们的想象,可以添加一些动画进去,使得界面更加炫,

OK,今天就扯到这里,吃饭 time...




你可能感兴趣的:(android初探)