【问题标题】:How to load image from url into BottomNavigationView menu item icon如何将图像从 url 加载到 BottomNavigationView 菜单项图标
【发布时间】:2023-03-26 07:57:02
【问题描述】:

我想将图片从 url 加载到底部导航视图的菜单项图标中。与 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?) {
            }
        })

【问题讨论】:

  • 你找到答案了吗??
  • @vivekpanchal,是的,实际上只是将应用程序上下文传递给 Glide.with(App.Instance) 及其工作
  • 我做了完全一样的,但我得到一个灰色图标你能分享代码吗?如果可能的话
  • @vivekpanchal 在答案中添加了工作代码。请检查

标签: android android-glide bottomnavigationview material-components-android


【解决方案1】:

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

App 是我的应用类

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?) {
            }
        })

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 2017-07-13
    相关资源
    最近更新 更多