您的位置:首页 > 移动开发 > Android开发

Android 左右滑动切换页面或Activity的效果实现

2011-06-29 15:17 976 查看
对于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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐