Android Studio之多个Activity的滑动切换(二)

1、由于Android界面上的所有控件一般都位于Layout控件(比如RelativeLayout)之上,而布局控件可以设置响应touch事件,所以可以通过布局控件的setOnTouchListen来截获touch事件,做进一步的处理。

2、关于界面滑动,涉及到gesture的处理,而gesture(手势)是touch事件的更高一层的事件,可以将touch事件传入GestureDetector对象进行处理,而创建GestureDetector对象,,要首先创建OnGestureListener对象,在OnGestureListener的OnFling函数中可以进行手势识别。

3、具体流程。实现OnTouchListen和OnGestureListen两个抽象类,同时实现其中的抽象函数即可。

(1)IntellisenseActivity中继承抽象类

(2)创建布局控件RelativeLayout的id为relativelayout

(3)代码编写

<span style="font-size:14px;">package com.design.cjc.intellisense;import android.content.Intent;import android.support.v7.app.ActionBarActivity;import android.os.Bundle;import android.view.GestureDetector;import android.view.Menu;import android.view.MenuItem;import android.view.MotionEvent;import android.view.View;import android.widget.RelativeLayout;public class IntellisenseActivity extends ActionBarActivity implements View.OnTouchListener,GestureDetector.OnGestureListener{private RelativeLayout rl;private GestureDetector gd;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_intellisense);rl=(RelativeLayout)findViewById(R.id.relativelayout);rl.setOnTouchListener(this);rl.setLongClickable(true);//很重要gd=new GestureDetector((GestureDetector.OnGestureListener)this);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.menu_intellisense, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();//noinspection SimplifiableIfStatementif (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}@Overridepublic boolean onDown(MotionEvent e) {return false;}@Overridepublic void onShowPress(MotionEvent e) {}@Overridepublic boolean onSingleTapUp(MotionEvent e) {return false;}@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {return false;}@Overridepublic void onLongPress(MotionEvent e) {}@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {//手势识别//e1:起点信息//e2:终点信息//velocityX:x方向移动速度//velocityY:y方向移动速度final int FLING_MIN_DISTANCE=100;final int FLING_MIN_VELOCITY=200;if(e1.getX() – e2.getX() > FLING_MIN_DISTANCE && Math.abs(velocityX) > FLING_MIN_VELOCITY){Intent intent = new Intent(IntellisenseActivity.this, PCCtrlActivity.class);startActivity(intent);}return false;}@Overridepublic boolean onTouch(View v, MotionEvent event) {return gd.onTouchEvent(event);//touch事件交给GestureDetector处理//return false;}}</span>

(3)PCCtrlActivity中做与IntellisenseActivity相近的处理package com.design.cjc.intellisense;import android.content.Intent;import android.support.v7.app.ActionBarActivity;import android.os.Bundle;import android.view.GestureDetector;import android.view.Menu;import android.view.MenuItem;import android.view.MotionEvent;import android.view.View;import android.widget.RelativeLayout;public class PCCtrlActivity extends ActionBarActivity implements View.OnTouchListener,GestureDetector.OnGestureListener {private RelativeLayout rl;private GestureDetector gd;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_pcctrl);rl=(RelativeLayout)findViewById(R.id.relativelayout);rl.setOnTouchListener(this);rl.setLongClickable(true);//很重要gd=new GestureDetector((GestureDetector.OnGestureListener)this);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.menu_pcctrl, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();//noinspection SimplifiableIfStatementif (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}@Overridepublic boolean onDown(MotionEvent e) {return false;}@Overridepublic void onShowPress(MotionEvent e) {}@Overridepublic boolean onSingleTapUp(MotionEvent e) {return false;}@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {return false;}@Overridepublic void onLongPress(MotionEvent e) {}@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {final int FLING_MIN_DISTANCE=100;final int FLING_MIN_VELOCITY=200;if(e1.getX() – e2.getX() > FLING_MIN_DISTANCE && Math.abs(velocityX) > FLING_MIN_VELOCITY){Intent intent = new Intent(PCCtrlActivity.this,IntellisenseActivity.class);startActivity(intent);}return false;}@Overridepublic boolean onTouch(View v, MotionEvent event) {return gd.onTouchEvent(event);}}

参考文献

参考文献1

参考文献2

积极的人在每一次忧患中都看到一个机会,

Android Studio之多个Activity的滑动切换(二)

相关文章:

你感兴趣的文章:

标签云: