Как я могу установить изображение профиля пользователя в bottomnavigationview с URL-адреса сервера

#android #android-glide #bottomnavigationview

#Android #android-glide #bottomnavigationview

Вопрос:

Я хочу отправить изображение моего профиля в нижнем навигационном представлении с помощью glide следующим образом:

 Glide.with(this)
        .asBitmap()
        .load(user.getProfileImageUrl())
        .apply(RequestOptions.circleCropTransform())
        .into(new CustomTarget<Bitmap>() {
            @SuppressLint("NewApi")
            @Override
            public void onResourceReady(@NonNull Bitmap resource,
                                        @Nullable Transition<? super Bitmap> transition) {
                Drawable drawable = new BitmapDrawable(getResources(), resource);
                navigationView.getMenu().findItem(R.id.item_profile).setIcon(drawable);
            }

            @Override
            public void onLoadCleared(@Nullable Drawable placeholder) {

            }
        });
 

Вот так, но изображение не установлено.

Ответ №1:

Вы можете настроить нижнюю навигацию и использовать Glide для загрузки изображения.

найдите ImageView из navigationItemView:

     val navigationItemView = findViewById<BottomNavigationItemView>(itemId)

    val imageView = navigationItemView.children.find {
        it is ImageView
    } as? ImageView ?: return


    loadProfileImage(imageView, imageUrl, placeHolderResourceId, itemId)
 

загрузить изображение :

     private fun loadProfileImage(
    imageView: ImageView,
    imageUrl: String,
    @DrawableRes placeHolderResourceId: Int,
    @IdRes itemId: Int
) {

    Glide.with(this)
        .load(imageUrl)
        .diskCacheStrategy(DiskCacheStrategy.NONE)
        .optionalCircleCrop()
        .placeholder(placeHolderResourceId)
        .listener(object : RequestListener<Drawable> {

            override fun onLoadFailed(
                e: GlideException?,
                model: Any?,
                target: Target<Drawable>?,
                isFirstResource: Boolean
            ): Boolean {
                return false
            }

            override fun onResourceReady(
                resource: Drawable?,
                model: Any?,
                target: Target<Drawable>?,
                dataSource: DataSource?,
                isFirstResource: Boolean
            ): Boolean {

                isImageLoaded = true

                if (selectedItemId == itemId) {
                    imageView.clearColorFilter()
                    handleImageItemSelected(imageView)
                }

                return false
            }

        })
        .into(imageView)

}
 

пожалуйста, ознакомьтесь с этим репозиторием…Я реализовал этот сценарий!

https://github.com/farshadrezaee/load-image-in-bottom-navigation