android 多窗口见左右滑动,Android 左右滑动切换页面或Activity的效果实现

本文介绍了在Android中实现多个Activity之间通过手势左右滑动进行切换的方法。需要继承OnGestureListener和OnDoubleTapListener,添加mGestureDetector定义并设置触摸事件,重载onFling和onTouch函数,还给出了SnsConstant类的代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于Android桌面可以用手势左右滑动进行切换。或者大家用过iReader的一定被其丰富的手势折服吧。现在看看自己的多个Activy之间如何切换呢

1、需要继承OnGestureListener和OnDoubleTapListener,如下:

Java代码

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

public class ViewSnsActivity extends Activity implements OnTouchListener, OnGestureListener

public class ViewSnsActivity extends Activity implements OnTouchListener, OnGestureListener

2、在添加mGestureDetector的定义,并在 ViewSnsActivity的onCreate函数中加入其页面布局的setOnTouchListener事件

Java代码

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

GestureDetector mGestureDetector;

GestureDetector mGestureDetector;

Java代码

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

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代码

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

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代码

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

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代码

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

public boolean onTouch(View v, MotionEvent event) {

return mGestureDetector.onTouchEvent(event);

}

public boolean onTouch(View v, MotionEvent event) {

return mGestureDetector.onTouchEvent(event);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值