一. 如何做阴影效果
带阴影效果的圆
2 关键步骤
- 阴影不支持硬件加速, 所以先关闭硬件加速
init {
setLayerType(LAYER_TYPE_SOFTWARE, null)
}
- 关键函数
Paint#setShadowLayer(float radius, float dx, float dy, int color)
- radius: 越大越模糊
- dx: 模糊的横轴偏移
- dy: 模糊的纵向偏移
- color: 阴影的颜色
实例技巧
先画阴影, 再实心图,最后画boarder;
完成底图,然后具体的内容
- 准备不同的Paint(阴影, 底图, 实线);
- 计算Path
-
onDraw
中用不同的Paint 画同一个Path
二. 在线查看Android 源码
今日源码收获:
- Handler 的Loop中天生存在问题:(置空,修改JVM)
- Dialog 天然会内存泄漏(Listener变弱引用,Handler中IdleHandler的使用)
- JVM中的GC逻辑
三.Navigation的使用
- 可以跨不同的Navigation文件
- AFragment-BFragment后, BFragment消失并返回数据给AFragment
// 进入下一个Fragment
findNavController().navigate(
XXXXFragmentDirections.acctionA_TO_B(data)
)
// 其中Data 在navigation文件 action 节点中注册
// 注册一个BFragment返回的监听
viewLifecycleOwner.lifecycle.addObserver(
NavDestinationChangedObserver(
pageNavId,
controller,
onDismiss
)
)
// 传送数据给上一个Fragment
findNavController().previousBackStackEntry!!.savedStateHandle.set(key, value)
dismiss()
//
进入疑问?
- ViewModel 创建的规律
- by ViewModel 有什么不同
同一个Fragment 中 使用 byViewModel
会
得到同一个ViewModel.
不同的Fragment 中 使用 by ViewModel
不
能得到同一个ViewModel
在不同的Fragment中使用 by activityViewModels
会
得到同一个ViewModel
结论 :
by XXViewModel
获得的ViewModel
的最大意义是作用域问题