對於Android案頭可以用手勢左右滑動進行切換。或者大家用過iReader的一定被其豐富的手勢折服吧。現在看看自己的多個Activy之間如何切換呢
1、需要繼承OnGestureListener和OnDoubleTapListener,如下:
Java代碼
- public
class
ViewSnsActivity
extends
Activity
implements
OnTouchListener, OnGestureListener
public class ViewSnsActivity extends Activity implements OnTouchListener, OnGestureListener
2、在添加mGestureDetector的定義,並在
ViewSnsActivity的onCreate函數中加入其頁面配置的setOnTouchListener事件
Java代碼
- GestureDetector mGestureDetector;
GestureDetector mGestureDetector;
Java代碼
- public
void
onCreate(Bundle savedInstanceState) {
- super
.onCreate(savedInstanceState);
- setContentView(R.layout.view_sns_activity);
-
- mGestureDetector = new
GestureDetector((OnGestureListener)
this
);
- LinearLayout viewSnsLayout = (LinearLayout)findViewById(R.id.viewSnsLayout);
- viewSnsLayout.setOnTouchListener(this
);
- viewSnsLayout.setLongClickable(true
);
- }
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.view_sns_activity); mGestureDetector = new GestureDetector((OnGestureListener) this); LinearLayout viewSnsLayout = (LinearLayout)findViewById(R.id.viewSnsLayout); viewSnsLayout.setOnTouchListener(this); viewSnsLayout.setLongClickable(true); }
3、重載onFling函數
Java代碼
-
public
boolean
onFling(MotionEvent e1, MotionEvent e2,
float
velocityX,
- float
velocityY) {
-
- if
(e1.getX()-e2.getX() > snsConstant.getFlingMinDistance()
- && Math.abs(velocityX) > snsConstant.getFlingMinVelocity()) {
-
- // 切換Activity
- // Intent intent = new Intent(ViewSnsActivity.this, UpdateStatusActivity.class);
- // startActivity(intent);
- Toast.makeText(this
,
"向左手勢"
, Toast.LENGTH_SHORT).show();
- } else
if
(e2.getX()-e1.getX() > snsConstant.getFlingMinDistance()
- && Math.abs(velocityX) > snsConstant.getFlingMinVelocity()) {
-
- // 切換Activity
- // Intent intent = new Intent(ViewSnsActivity.this, UpdateStatusActivity.class);
- // startActivity(intent);
- Toast.makeText(this
,
"向右手勢"
, Toast.LENGTH_SHORT).show();
- }
-
- return
false
;
- }
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {if (e1.getX()-e2.getX() > snsConstant.getFlingMinDistance()&& Math.abs(velocityX) > snsConstant.getFlingMinVelocity()) {// 切換Activity//Intent intent = new Intent(ViewSnsActivity.this, UpdateStatusActivity.class);//startActivity(intent);Toast.makeText(this, "向左手勢", Toast.LENGTH_SHORT).show();} else if (e2.getX()-e1.getX() > snsConstant.getFlingMinDistance()&& Math.abs(velocityX) > snsConstant.getFlingMinVelocity()) {//切換Activity//Intent intent = new Intent(ViewSnsActivity.this, UpdateStatusActivity.class);//startActivity(intent);Toast.makeText(this, "向右手勢", Toast.LENGTH_SHORT).show();}return false; }
其中SnsConstant如下:
Java代碼
- public
class
SnsConstant {
- private
static
final
int
FLING_MIN_DISTANCE =
50
;
- private
static
final
int
FLING_MIN_VELOCITY =
0
;
-
- public
static
int
getFlingMinDistance() {
- return
FLING_MIN_DISTANCE;
- }
- public
static
int
getFlingMinVelocity() {
- return
FLING_MIN_VELOCITY;
- }
- }
public class SnsConstant { private static final int FLING_MIN_DISTANCE = 50; private static final int FLING_MIN_VELOCITY = 0; public static int getFlingMinDistance() {return FLING_MIN_DISTANCE;}public static int getFlingMinVelocity() {return FLING_MIN_VELOCITY;}}
4、重載onTouch函數
Java代碼
- public
boolean
onTouch(View v, MotionEvent event) {
- return
mGestureDetector.onTouchEvent(event);
- }
public boolean onTouch(View v, MotionEvent event) {return mGestureDetector.onTouchEvent(event);}