xbeats / and_swipeback Goto Github PK
View Code? Open in Web Editor NEW高仿最新版微信6.2手势滑动返回
高仿最新版微信6.2手势滑动返回
基于该库做了一些修改,例如加入滑动触发的判断.目前的情况是左边的一些按钮无法触发.
改完后发现因为Handler和事件分发有时候会造成时序的混乱.直接把SwipeWindowHelper去除了继承Handler.
想问下当时是基于什么情况下考虑使用Handler.
首先在AppTheme的Style里面加上这句话
<item name="android:windowIsTranslucent">true</item>
加上以解决闪屏问题,可能动画会失效,这个时候需要给窗口增加动画,也就是在style中加上
<item name="android:windowAnimationStyle">@style/Animation.Activity.Translucent.Style</item>
而这个的动画风格具体实现又是这个
<style name="Animation.Activity.Translucent.Style" parent="@android:style/Animation.Translucent">
<item name="android:windowEnterAnimation">@anim/slide_in_from_right</item>
<item name="android:windowExitAnimation">@anim/slide_out_to_right</item>
</style>
slide_in_from_right具体如下:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="200"
android:fromXDelta="100%p"
android:toXDelta="0" />
</set>
slide_out_to_right具体如下:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="200"
android:fromXDelta="0"
android:toXDelta="100%p" />
</set>
style修改以后,如果不出意外,那么会在手势左滑返回时多一次返回窗口动画,这个动画具体内容页面就是上一层的Activity的视图,到这里之后要修改源码了,将SwipeBackHelper的handleMessage函数中的 case MSG_SLIDE_FINISHED:修改成以下代码
mViewManager.removeShadowView();
mViewManager.resetPreviousView();
mActivity.finish();
修改完毕之后,是不是左滑还有一个灰色背景或白色背景?这个就是属于窗口的背景了,所以最后只需要 在Style中加入一句
<item name="android:windowBackground">@color/transparent</item>
再试试,是不是效果完成?不保证百分百兼容,只是作为一个参考供大家使用。
会先黑屏一下,滑动也有卡顿
一个activity隐藏了actionbar,另一个activity没有隐藏actionbar,此时从没有隐藏actionbar的activity滑动返回过程中,actionbar不能跟着滑动,背景页面会显示在actionbar下边,根布局为CoordinatorLayout时背景页会显示在状态栏中
期待后续完善
这个思路的话,每个Activity都要添加上一个的ContentView,性能方面会不会有影响?
A界面是NestedScrollView布局,
1.引入的是com.aitangba:swipeback:1.0.2这个版本,返回A界面的时候会自动上滑一部分
2.引入的是com.aitangba:swipeback:1.0.1这个版本,A界面返回前一个界面的的时候A界面也会上滑一部分
作者可以写两个NestedScrollView布局的Activity来回切换测试。
如果你打开 overDraw 的话,应该能看出来 微信 的UI部分使用了Fragment(比如会话界面),同样支持侧滑返回,并且背景界面也会在侧滑的时候跟随做视差滑动,如果使用 ActivityLifecycleCallback,则没法追踪 fragment 的界面。
不过微信的侧滑返回应该是混合了很多种方式,比如有些其他进程的界面的侧滑,应该就是普通的透明背景加 Swipebacklayout。
你的这种实现方式很有意思,感觉就算 activity 栈销毁重建也不会影响 侧滑返回,而且也没有 Swipebacklayout 的性能问题。
https://github.com/29995270/WechatSwipeBack
我也有做一个实现,但是没法处理 activity 栈被销毁的问题,也很难实际应用。
快速的滑动关闭多个页面很好复现这个问题
我司测试发现的,迅速从左往右一扫,页面会先白屏一下,再加载上一个activity,这个如何解决下?
在360崩溃日志系统看到的
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference at android.view.ViewConfiguration.get(ViewConfiguration.java:359) at android.view.View.(View.java:3646) at com.aitangba.swipeback.ShadowView.(ShadowView.java:18) at com.aitangba.swipeback.SwipeBackHelper$ViewManager.addShadowView(SwipeBackHelper.java:443) at com.aitangba.swipeback.SwipeBackHelper$ViewManager.access$300(SwipeBackHelper.java:375) at com.aitangba.swipeback.SwipeBackHelper.handleMessage(SwipeBackHelper.java:205) at android.os.Handler.dispatchMessage(Handler.java:111) at android.os.Looper.loop(Looper.java:224) at android.app.ActivityThread.main(ActivityThread.java:5911) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1113) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:879)
如题。
Google has confirmed it's a bug in Android 8.0, presumably fixed in 8.1. So the "empty animation" fix is for years, until minSdkVersion == 27.
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
</set>
activity.overridePendingTransition(R.anim.animation_activity_none, R.anim.animation_activity_none);
Bug fix!
开启don't keep Activity,上一个Activity就会activityStack里被移除。
把这个类应用在初始activity的时候 滑动返回 页面不动 也没有动画 滑动完了 就直接退出程序了.
滑动的时候 页面叠加在一起 有可能这时候有些和id相关的动作被触发 会出现问题
请问支持androidx么
1:如果我在侧边栏中,点击View,进入新的Activity,此时滑动返回,下层的界面并不是侧边栏,而是Activity,可能这和你实现的方式有关,DecorView。。。
2:滑动冲突:侧边栏无法滑动展开了,,当然这个可以解决
3:还是因为使用了DecorView,导致首页的几个Tab点击时会时不时报null。。。
4:StatusBar问题,不能很好地兼容沉浸式,由于项目的需要,其中有两种沉浸式实现,但是侧滑库只能兼容其中一种,另一种没办法兼容,而且会导致低层Activity的状态栏高度X2。。
在完成动画后屏幕会闪一下,非必现,但是出现概率很高
RT
App集成这个滑动返回库后,在Monkey测试时发现一个问题 。
// android.content.res.Resources$NotFoundException: File res/drawable-xxhdpi-v4/welcome.png from drawable resource ID #0x7f020191: .xml extension required
// at android.content.res.Resources.loadColorStateListForCookie(Resources.java:2808)
// at android.content.res.Resources.loadColorStateList(Resources.java:2749)
// at android.content.res.TypedArray.getColor(TypedArray.java:441)
// at com.aitangba.swipeback.SwipeBackHelper.getWindowBackgroundColor(SwipeBackHelper.java:269)
// at com.aitangba.swipeback.SwipeBackHelper.handleMessage(SwipeBackHelper.java:210)
// at android.os.Handler.dispatchMessage(Handler.java:102)
// at android.os.Looper.loop(Looper.java:148)
// at android.app.ActivityThread.main(ActivityThread.java:5438)
// at java.lang.reflect.Method.invoke(Native Method)
// at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
// at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)
当前Activity没有使用actionbar ,上一个Activity使用了actionbar,这时候右滑返回上一页时,actionbar 显示空白,只有当上一个 Activity 完全显示出来时,actionbar重绘了才有东西,重绘之前都是空白。
如果存在ActionBar,ActionBar不会移动。
发现你这种实现方案挺新颖的,解决了设置Activity背景透明生命周期导致的性能问题。
魅族Pro5 5.1系统 滑动返回100%出现闪屏
1、设置沉浸布局
2、avtivityA跳转activityB,滑动返回activityA
3、activityA的页面布局向下抖动了一个状态栏高度后恢复原状
我的华为荣耀4x和p9Plus都没有效果,直接下载运行的,是不是还要配置下
scrollview, listview, recyclerView 都会出现自动滚动
谢谢你的开源代码 我发现些问题 多进程栈底的activity无效 ,还有设置了intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);也会导致无效 有没有好 的解决思路或方法
滑动动画还没有播放完毕的时候,点击返回键页面就变空白了
�如果两个节目的状态栏颜色不一样,滑动的效果并不友好,有解决思路吗
状态栏是个问题.如果两个activity状态栏不一样的话...效果并不好,另外如果当前页面设置了fifSystemWindow..也不是很好,不过这样的方式是个很棒的思路!
如题,源码跑出来的demo也有这个问题。如果是手指滑动屏幕,返回到上一个界面,就不会出现黑边。对了这个黑边在屏幕右侧,在快要回到上一个界面的时候,闪现
在我需要右滑返回的界面,如果有webView、上下拉刷新、listview 所有这些可以上下拖动的视图,滑动关闭时都会让里面的视图往上滑动。
如果上一个Activity的页面特别复杂的话,比如是一个复杂的WebView,那么就是导致滑动的过程中非常卡顿。如果用透明主题来实现的话则不会有这样的性能问题,不知道作者有什么办法能解决
java.lang.NullPointerException
Attempt to invoke interface method 'boolean java.util.List.contains(java.lang.Object)' on a null object reference
hg.zp.ui.ui.activity.WelcomeActivity.onDestroy(WelcomeActivity.java:108)
.......
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'boolean java.util.List.contains(java.lang.Object)' on a null object reference
at com.aitangba.swipeback.ActivityLifecycleHelper.onActivityDestroyed(ActivityLifecycleHelper.java:64)
at android.app.Application.dispatchActivityDestroyed(Application.java:569)
at android.app.Activity.dispatchActivityDestroyed(Activity.java:1446)
at android.app.Activity.onDestroy(Activity.java:2660)
.............
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setX(float)' on a null object reference
at com.aitangba.swipeback.SwipeBackHelper$ViewManager.translateViews(SwipeBackHelper.java:388)
at com.aitangba.swipeback.SwipeBackHelper$ViewManager.access$300(SwipeBackHelper.java:268)
at com.aitangba.swipeback.SwipeBackHelper.setTranslationX(SwipeBackHelper.java:209)
at com.aitangba.swipeback.SwipeBackHelper.processTouchEvent(SwipeBackHelper.java:111)
at cn.kunming.common.activity.SwipeBackActivity.dispatchTouchEvent(SwipeBackActivity.java:33)
at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2405)
at android.view.View.dispatchPointerEvent(View.java:9548)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4515)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4313)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3823)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3883)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3842)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3990)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3850)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4047)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3823)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3883)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3842)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3850)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3823)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6239)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6213)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6174)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6346)
at android.view.ViewRootImpl$ColorWindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7598)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:176)
at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:6313)
at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:6369)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:862)
at android.view.Choreographer.doCallbacks(Choreographer.java:674)
at android.view.Choreographer.doFrame(Choreographer.java:604)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:848)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:179)
at android.app.ActivityThread.main(ActivityThread.java:5769)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:674)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.