玩Android大家都很熟悉了,是鸿洋大佬的一个开源知识网站,目前基于玩Android开源API的各种版本APP也多是如牛毛。

那么经过一段时间的潜心修炼,今天给大家带来了一个从未有过的船新版本。

设计

这次的UI整体是根据Google官方的设计,参照Material Design的风格整粗来的,应该能给大家带来耳目一新的感觉。

下面我们先来看看效果图

底部导航栏使用了BottomAppbar和FloatingActionButton组件

MaterialShapeDrawable实现了展开菜单的Material丝滑动画

private val foregroundShapeDrawable: MaterialShapeDrawable by lazy(NONE) {        val foregroundContext = binding.foregroundContainer.context        MaterialShapeDrawable(            foregroundContext,            null,            R.attr.bottomSheetStyle,            0        ).apply {            fillColor = ColorStateList.valueOf(                foregroundContext.themeColor(R.attr.colorPrimarySurface)            )            elevation = resources.getDimension(R.dimen.plane_16)            shadowCompatibilityMode = MaterialShapeDrawable.SHADOW_COMPAT_MODE_NEVER            initializeElevationOverlay(requireContext())            shapeAppearanceModel = shapeAppearanceModel.toBuilder()                .setTopEdge(                        SemiCircleEdgeCutoutTreatment(                        resources.getDimension(R.dimen.grid_2),                        resources.getDimension(R.dimen.grid_3),                        0F,                        resources.getDimension(R.dimen.navigation_drawer_profile_image_size_padded)                    )                )                .build()        }    }

技术

技术方面采用的是Kotlin语言实现,整体架构为MVVM,使用协程配合Retrofit来创建和处理网络请求的异步任务。

封装了dataBinding和viewBinding的懒加载

/** * Fragment ViewBinding Delegate */fun  Fragment.viewBinding(viewBindingFactory: (View) -> T) =    FragmentViewBindingDelegate(this, viewBindingFactory)class FragmentViewBindingDelegate(    val fragment: Fragment,    val viewBindingFactory: (View) -> T) : ReadOnlyProperty {    private var _binding: T? = null    init {        fragment.lifecycle.addObserver(object : DefaultLifecycleObserver {            override fun onCreate(owner: LifecycleOwner) {                fragment.viewLifecycleOwnerLiveData.observe(fragment) { viewLifecycleOwner ->                    viewLifecycleOwner.lifecycle.addObserver(object : DefaultLifecycleObserver {                        override fun onDestroy(owner: LifecycleOwner) {                            _binding = null                        }                    })                }            }        })    }    override fun getValue(thisRef: Fragment, property: KProperty<*>): T {        val binding = _binding        if (binding != null) {            return binding        }        val lifecycle = fragment.viewLifecycleOwner.lifecycle        if (!lifecycle.currentState.isAtLeast(Lifecycle.State.INITIALIZED)) {            throw IllegalStateException("Should not attempt to get bindings when Fragment views are destroyed.")        }        return viewBindingFactory(thisRef.requireView()).also { _binding = it }    }}

项目地址

项目完整代码请移步GitHub仓库 WanAndroid_Gank

同时也欢迎各位看官老爷能给个star鼓励一下。

更多相关文章

  1. 一步一步在 Windows下搭建 React Native Android(安卓)开发环境
  2. Android应用架构
  3. Android(安卓)“退一步”的布局加载优化
  4. Android(安卓)Studio下运行开源项目9GAG遇到的问题
  5. Android(安卓)组件化最佳实践 ARetrofit原理
  6. Space-Navigation-View 底部栏点击
  7. RN填坑之旅
  8. android小项目demo2
  9. 如何创建一个安卓项目

随机推荐

  1. Android小项目--简易计算器
  2. 一点关于android的个人感受
  3. 把Android原生模拟器秒成渣的神器――Gen
  4. Android之来历
  5. Android下EditText中的字体不统一问题
  6. Android(安卓)动态菜单实现实例代码
  7. Android+Jquery Mobile学习系列(1)-开发
  8. Android应用开发资源
  9. App 开发 Android Fragments 的详细使用
  10. Android(安卓)OpenGL ES(九):绘制线段Line