【问题标题】:fixed placeholder in the center of image view在图像视图的中心固定占位符
【发布时间】:2019-03-04 02:00:38
【问题描述】:

通过使用 Glide 我在图像视图上设置了 placeholder 但问题是,它显示在整个图像视图上,我希望我的占位符大小为 50dp/50dp 但图片应该是setScale(fitXY)

我在glide listener 中解决了这个问题,我在运行时调整图像视图的大小,如果它从服务器获取图像然后 imageview width,height(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);

但问题是,如果没有来自服务器的图像,它会显示 size(50,50) 的占位符,并且当它有图像和滑行时需要一些毫秒来上传图像,因为它在整个图像视图上显示占位符的时间。

帮帮我

【问题讨论】:

标签: android imageview resize placeholder


【解决方案1】:

在 xml 中添加android:scaleType="center"

然后,Glide 使您的真实图像适合中心,并且占位符位于 xml 中心。 详情可在Glide: load drawable but don't scale placeholder查看

如果您希望 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);

【讨论】:

  • 我想要我的图片到fitXYcenter 的占位符,但尺寸更小,如上图所示
  • 然后,首先setScaleType="center" 然后,在资源准备好时将scaleType改为"fitXY"。
  • 我在onResourceReady 上遇到问题。当资源准备好时,它会在几毫秒内显示全尺寸占位符。
  • 它在onLoadFaild 上运行良好,因为我正在其中调整 imageview 的大小
【解决方案2】:

你可以试试这个代码。

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

【讨论】:

    猜你喜欢
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    相关资源
    最近更新 更多