фиксированный заполнитель в центре изображения - PullRequest
0 голосов
/ 28 сентября 2018

Используя Glide , я устанавливаю заполнитель при просмотре изображения, но проблема в том, что он отображается при просмотре всего изображения, я хочу, чтобы размер заполнителя был 50dp / 50dp, но изображение должноbe setScale(fitXY).

Я решил проблему в glide listener, я изменяю размер изображения во время выполнения, если он получает изображение с сервера, то imageview ширина, высота (x, y) если нет, то (x, y) .

Glide.with(context)
            .load(news.getUrlToImage())
            .listener(new RequestListener<Drawable>() {
                @Override
                public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(131, 131);
                    layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
                    holder.NewsImage.setLayoutParams(layoutParams);
                    return false;
                }

                @Override
                public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(495, 360);
                    holder.NewsImage.setLayoutParams(layoutParams);
                    holder.NewsImage.setScaleType(ImageView.ScaleType.FIT_XY);
                    return false;
                }
            }).apply(new RequestOptions().placeholder(R.drawable.place_holder).dontAnimate())
            .into(holder.NewsImage);

Но проблема в том, что если с сервера нет изображения, оно показывает заполнитель размера (50,50) отлично, и когда у него есть изображение и скольжение, его загрузка занимает несколько миллисекунд, в это время он показывает заполнитель при просмотре всего изображения.

HELP ME

I want this

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Вы можете попробовать этот код.

  RequestOptions options = new RequestOptions()
            .priority(Priority.NORMAL)
            .placeholder(R.drawable.placeholderImageName)
            .diskCacheStrategy(DiskCacheStrategy.NONE)
            .skipMemoryCache(true)
            .fitCenter()
            .error(R.drawable.errorImageName);
    Glide.with(mContext)
            .load("ImagePath")
            .apply(options)
            .into(Img_imageView);
0 голосов
/ 28 сентября 2018

Добавьте android:scaleType="center" в формате xml.

Затем Glide сделает изображение подходящим по центру, а заполнитель будет расположен в центре по xml.Вы можете проверить детали в Glide: загружать отрисовку, но не масштабировать местозаполнитель

Если вы хотите, чтобы этот scaleType был «fitXY» Попробуйте ниже.

holder.NewsImage.setScaleType(ImageView.ScaleType.CENTER);
Glide.with(context)
        .load(news.getUrlToImage())
        .listener(new RequestListener<Drawable>() {
            @Override
            public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(131, 131);
                layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
                holder.NewsImage.setLayoutParams(layoutParams);
                return false;
            }

            @Override
            public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(495, 360);
                holder.NewsImage.setLayoutParams(layoutParams);
                holder.NewsImage.setScaleType(ImageView.ScaleType.FIT_XY);
                return false;
            }
        }).apply(new RequestOptions().placeholder(R.drawable.place_holder).dontAnimate())
        .into(holder.NewsImage);
...