0

I want to sent the my profile image in bottom navigation view with glide like this:

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

            }
        });

Like this but the image is not set.

Son Truong
  • 13,661
  • 5
  • 32
  • 58
Sandeep Malik
  • 1,972
  • 1
  • 8
  • 17

1 Answers1

1

You can customize Bottom Navigation and use Glide for load image.

find ImageView from navigationItemView:

    val navigationItemView = findViewById<BottomNavigationItemView>(itemId)

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


    loadProfileImage(imageView, imageUrl, placeHolderResourceId, itemId)

load image :

    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)

}

please see this repo...I have implemented this scenario!

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