大小 Imageview 占位符

SIze Imageview Placeholders

我在每个 cell.Each 图像视图中使用带有图像视图的 recyclerview 从网络加载图像并且可以是正方形或宽度大于高度或高度大于宽度即任何 sizes.I 将要显示每个图像在后台加载时的占位符(带有进度条)。但问题是图像的尺寸是未知的,我想将占位符的大小精确地调整为图像的大小,例如 9gag 应用程序,其中占位符是在 bacground.How 中加载时图像的确切大小 我在 android 中实现了吗?我不想使用 wrap-content(在图像下载后产生刺耳的效果)或图像视图的特定高度(裁剪图像)。我正在使用 UIL,目前正计划切换到 Fresco 或 Picassa。

您可以随图像提供图像尺寸 url。 (我假设你是从一个来源获取图像列表,比如 JSON 文件或其他东西。)并根据它们的尺寸调整 RecyclerView 内的 ImageView 支架的大小,然后启动图像下载过程。

如果您使用 fresco,则需要从 Web 服务器传递图像的宽度和高度,然后使用该宽度和高度设置绘图视图的布局参数。

像这样:

RelativeLayout.LayoutParams draweeParams =
                    new RelativeLayout.LayoutParams(desiredImageWidthPixel,
                            desiredImageHeightPixel);
yourDraweeView.setLayoutParams(draweeParams);

根据您从 Web 服务器传递的图像的宽度和高度,您可以 calculate/resize 根据需要按比例显示视图。其中 desiredImageWidthPixel 是您要在您的 DraweeView 中显示的计算图像宽度,desiredImageHeightPixel 是您要在您的 DraweeView 中显示的计算图像高度。

别忘了打电话

yourDraweeView.getHierarchy().setActualImageScaleType(ScalingUtils.ScaleType.FIT_XY);

使您的DraweeView 与您之前设置的实际参数匹配。 希望这有帮助

如果您的占位符只是填充了某种颜色,您可以轻松模拟具有完全相同大小的颜色可绘制对象。

/**
 * The Color Drawable which has a given size.
 */
public class SizableColorDrawable extends ColorDrawable {

  int mWidth = -1;

  int mHeight = -1;

  public SizableColorDrawable(int color, int width, int height) {
    super(color);

    mWidth = width;
    mHeight = height;
  }

  @Override public int getIntrinsicWidth() {
    return mWidth;
  }

  @Override public int getIntrinsicHeight() {
    return mHeight;
  }
}

与 Picasso 一起使用:

Picasso.with(context).load(url).placeholder(new SizableColorDrawable(color, width, height)).into(imageView);

现在关于ImageView的一些提示:

public class DynamicImageView extends ImageView {

  @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    Drawable drawable = getDrawable();
    if (drawable == null) {
      super.onMeasure(widthSpecureSpec, heightMeasureSpec);
      return;
    }
    int width = MeasureSpec.getSize(widthMeasureSpec);
    int height = MeasureSpec.getSize(heightMeasureSpec);
    int reqWidth = drawable.getIntrinsicWidth();
    int reqHeight = drawable.getIntrinsicHeight();
    // Now you have the measured width and height, 
    // also the image's width and height,
    // calculate your expected width and height;
    setMeasuredDimension(targetWidth, targetHeight);
  }
}

希望这会对某人有所帮助..