Android 仿小米的全面屏手势-侧滑返回

本文介绍了一种在Android应用中实现滑动返回功能的方法,通过使用SlideBack库简化开发过程,避免直接修改系统代码。文章提供了详细的实现步骤及示例代码。

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

看测试图:
在这里插入图片描述自己写是不存在的,这辈子都是不可能的。实现这个有两种方法;
1.修改系统代码,
emmm,网上基本找不到方法,但这种思路是可以的,有大神搞定了,可以分享一波
2.在软件中适配
在逛了一圈github后找到一个比较好用的,其他的也有,但是不是包各种各样的错,就是比较麻烦,地址如下:
https://github.com/ParfoisMeng/SlideBack
里面有引用说明,很简单,几分钟搞定
这是我的demo代码:使用了注解框架,不要在意

package cn.itcast.slideback;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;

import com.parfoismeng.slidebacklib.SlideBack;
import com.parfoismeng.slidebacklib.callback.SlideBackCallBack;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

import static cn.itcast.slideback.R.id.bt;

public class MainActivity extends AppCompatActivity {
    @BindView(R.id.bt)
    Button bt;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        // 在需要滑动返回的Activity中注册,最好但非必须在onCreate中
        SlideBack.with(this)
                .callBack(new SlideBackCallBack() {
                    @Override
                    public void onSlideBack() {
                     finish();
                    }
                })
                .register();
    }
    public void onDestroy() {

        super.onDestroy();
        // onDestroy时解绑
        // 内部使用WeakHashMap,理论上不解绑也行,但最好还是手动解绑一下
        SlideBack.unregister(this);
    }
    @OnClick(R.id.bt)
    public void onViewClicked(){
        Intent intent = new Intent(MainActivity.this,MainActivity.class);
        startActivity(intent);
    }
}
Android侧滑返回方案,支持SDK19(Android4.4)及以上。目录示例demo功能介绍实现原理集成方式使用方式注意事项示例demoDemo下载示例效果点此下载 或扫描下面二维码功能介绍支持SDK19(Android4.4)及以上Activity的侧滑返回,同时实现沉浸式状态栏。实现原理侧滑时利用反射将窗口转为透明,结束后再利用反射将窗口还原为不透明。详细分析集成方式在module的build.gradle中添加如下代码    dependencies {         implementation 'cn.simonlee.widget:swipeback:1.0.10'     }使用方式STEP.1在Activity的styles中配置如下属性<item name="android:windowBackground">@android:color/transparent</item>STEP.2在Activity的onCreate方法中获取SwipeBackHelper实例@Overridepublic void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);     setContentView(R.layout.activity_swipeback);    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {         mSwipeBackHelper = new SwipeBackHelper(this);        //设置窗口背景颜色,以覆盖不可见区域的黑色背景(不可见区域常见为当输入法及导航栏变化时的背景)         mSwipeBackHelper.setWindowBackgroundColor(getResources().getColor(R.color.colorWindowBackground));     } }STEP.3在Activity的dispatchTouchEvent和onTouchEvent中分发触摸事件,如果仅希望侧边触发,可以不用onTouchEvent@Overridepublic boolean dispatchTouchEvent(MotionEvent event) {    if (mSwipeBackHelper != null) {         mSwipeBackHelper.dispatchTouchEvent(event);     }    return super.dispatchTouchEvent(event); }@Overridepublic boolean onTouchEvent(MotionEvent event) {    if (mSwipeBackHelper != null) {         mSwipeBackHelper.onTouchEvent(event);     }    return super.onTouchEvent(event); }注意事项Tips.1如需要适配SDK21(Android5.0)以下,必须在styles中配置如下属性。SDK21及以上无需此属性<item name="android:windowIsTranslucent">true</item>Tips.2因状态栏透明,输入法的adjustPan模式不会生效,建议设置为adjustResizeTips.3因状态栏透明,布局会从屏幕顶端开始绘制,需自行调整paddingTop//获取状态栏的高度public int getStatusBarHeight() {    int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");    try {        return getResources().getDimensionPixelSize(resourceId);     } catch (Resources.NotFoundException e) {        return 0;     } }Tips.4侧滑的核心原理是利用反射转换窗口透明,这会影响到下层Activity的生命周期。侧滑过程中窗口转为透明时,下层Activity会被唤醒,进入onStart状态,如果发生屏幕旋转,下层Activity还将会进行重建。当我们将窗口恢复为不透明,下层Activity会重新进入onStop状态。因此如果你的Activity代码逻辑比较混乱,使用之前务必进行逻辑优化。Tips.5当顶层Activity方向与下层Activity方向不一致时侧滑失效(下层方向未锁定除外),请关闭该层Activity侧滑功能。 示例场景:竖屏界面点击视频,进入横屏播放。Tips.6如需动态支持横竖屏切换(比如APP中有“支持横屏”开关),屏幕方向需指定为behind跟随栈底Activity方向,同时在onCreate中进行判断,若不支持横竖屏切换则锁定屏幕方向(因为经测试SDK21中behind无效)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值