如何将 url 中的图像加载到 BottomNavigationView 菜单项图标中

How to load image from url into BottomNavigationView menu item icon

我想将 url 中的图像加载到 bottomnavigationview 的菜单项图标中。与 instagram 一样,我们希望在我们的菜单之一中显示个人资料图片,这可能会在从不同的可用个人资料切换时发生变化。 目前,我正在尝试下面的代码,但它不会每次都加载图像。

val menu = mViewDataBinding?.bnvNavigation?.menu
    val menuItem = menu?.findItem(R.id.menu_profile)

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        menuItem?.setIconTintList(null)
        menuItem?.setIconTintMode(null)
    }


    Glide.with(this)
        .asBitmap()
        .load(profilePic)
        .apply(
            RequestOptions.circleCropTransform()
                .placeholder(R.drawable.user_profile_icon_updated)
        )
        .into(object :
            CustomTarget<Bitmap>(UIHelper.dpToPx(this, 24), UIHelper.dpToPx(this, 24)) {
            override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
                menuItem?.icon = BitmapDrawable(resources, resource)
              }

            override fun onLoadCleared(placeholder: Drawable?) {
            }
        })

我建议您使用芯片导航并创建自定义底部导航,它比默认的更好android底部导航并且更容易...

如果您有兴趣学习,可以使用本教程https://www.youtube.com/watch?v=DQtdOSN21lQ&feature=emb_logo and the library https://github.com/ismaeldivita/chip-navigation-bar

如果你有任何问题标记我来回答你

以上代码按预期工作,只是将应用程序上下文传递给 Glide,Glide.with(App.instance)

A​​pp是我的应用class

val menu = mViewDataBinding?.bnvNavigation?.menu
    val menuItem = menu?.findItem(R.id.menu_profile)
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        menuItem?.setIconTintList(null)
        menuItem?.setIconTintMode(null)
    }
    Glide.with(App.instance)
        .asBitmap()
        .load(profilePic)
        .placeholder(getProfilePlaceholderFilled())
        .error(getProfilePlaceholderFilled())
        .apply(
            RequestOptions.circleCropTransform().placeholder(getProfilePlaceholderFilled())
        )
        .into(object :
            CustomTarget<Bitmap>(UIHelper.dpToPx(this, 80), UIHelper.dpToPx(this, 80)) {
            override fun onResourceReady(
                resource: Bitmap,
                transition: Transition<in Bitmap>?
            ) {
                menuItem?.icon = BitmapDrawable(
                    resources, resource
                )
            }

            override fun onLoadFailed(errorDrawable: Drawable?) {
                menuItem?.icon = errorDrawable
            }

            override fun onLoadCleared(placeholder: Drawable?) {
            }
        })