FadingEdge 分析

最近设计需求要有边缘透明的淡入淡出,完成后发现其中的原理挺有意思的,于是分析一下系统是怎么生成边缘淡化 (FadingEdge)。 相关代码参见 FadingEdgeResearch 一. 系统滑动控件 使用 RecyclerView / ScrollView 等系统提供的可滑动控件,需要边缘淡化很简单,在 xml 中加入 android:requiresFadingEdge 指定需要淡化的方向即可。 跟踪 android:requiresFadingEdge 初始化设定的位置,是在最基本的 View 控件内。当 View 绘制时满足特定条件就会用内部的 ScrollabilityCache 绘制滚动条、边缘淡化等滑动用的元素。 抛开 ScrollabilityCache ,看看 View 的 draw(Canvas canvas) 方法,源代码里写得很清楚: /* * Draw traversal performs several drawing steps which must…

Read this article

应用加固后 APK 重签名脚本

360市场强制使用加固宝才能上传,应用宝使用乐固能加分,越来越多应用市场“推荐”使用自家加固服务。导致批量打包后还要挑出个别渠道进一步处理才能完事,好麻烦。 而且各家应用加固的重新签名工具都是 Windows 下的,在 mac OS 下每次都敲代码签名也好麻烦。所以写个脚本保存一下签名路径和密码,自动签名和重命名输出。批量使用的话,可以再套一个脚本循环调用即可。 详细见: SignAfterProtected Update: 签名方式由 jarsigner 更换为 apksigner , 可以默认使用 APK Signature Scheme v2…

Read this article

Android 7.0 网络变化监听

一般监听网络变化是在 AndroidManifest 中注册 BroadcastReceiver 来实现。 targetSdkVersion 升级到 24 后,发现静态注册广播的方式要被取消了。 Declaring a broadcastreceiver for android.net.conn.CONNECTIVITY_CHANGE is deprecated for apps targeting N and higher. In general, apps should not rely on this broadcast and instead use JobScheduler or GCMNetworkManager. Android 7.0 为了后台优化,推荐使用 JobScheduler 代替 BroadcastReceiver…

Read this article

沉浸式中显示 PopupWindow

在全屏沉浸模式时(Immersive Full-Screen Mode),如果弹出 Dialog 或 PopupWindow,则会自动退出沉浸模式。 退出沉浸式的原因是因为 Activity 的 Window 焦点被抢走了,Window 中的 DecorView 状态改变导致了退出。 如果要继续保持沉浸模式。对于 Dialog 情况,这里有解决办法 。 Dialog 在初始化时会生成新的 Window,先禁止 Dialog Window 获取焦点,等 Dialog 显示后对 Dialog Window 的 DecorView 设置 setSystemUiVisibility ,接着再获取焦点。 这样表面上看起来就没有退出沉浸模式。 而 PopupWindow 并没有创建新的 Window,只是将 PopupWindow 的 View 添加到当前的…

Read this article

GroupSnapHelper

Android Support Library v24.2.0 版中,RecyclerView 新增加了 OnFlingListener 接口, 同时提供了SnapHelper 抽象类和 LinearSnapHelper 实现类,用来处理在滚动过程中的定位。试用了一下 LinearSnapHelper , 使用的场景类似 WheelPicker 或 ViewPager,滚动后能将最接近 RecyclerView 中心的 closestItem 滚动居中。 想了一下,可以用这一特性来实现滑动一组 items ,代替 ViewPager 嵌套 RecyclerView 的情况。 如图: 代码见 GroupSnapHelper 在 LinearSnapHelper 和 SnapHelper 之间绕了半天,发现其实实现起来也挺简单的,在 LinearSnapHelper 基础上根据查找到的 closestItem , 再查找计算包含 closestItem…

Read this article

Goodbye Apache-HttpClient, Hello OkHttpClient

Android 从 M 开始取消支持 Apache-HttpClient,对于一直喜欢使用 android-async-http 的我来说,得换网络框架了,好麻烦啊!虽然官方推荐使用 HttpURLConnection,但 OkHttpClient 更好嘛。以前也试用过 OkHttpClient ,但总会有些或多或少的问题,没敢正式使用。现在 OkHttpClient 都 2.5.0 了, 更加稳定,是时候该用上了。 为了兼容以前 android-async-http 的使用习惯和特性,写了个模块包装一下OkHttpClient,用起来同样轻松愉快 : OkHttpManager post/get 需要支持同步、异步请求,共用一套Callback. RequestParams 可以添加各种类型参数、File、Stream. 可以添加CookieStore 哦,对了关于Callback仅仅只有最基本的 BaseCallback , 什么都没实现。毕竟 Callback…

Read this article