SIze Imageview占位符

时间:2015-08-30 19:30:14

标签: android image imageview fresco

我在每个单元格中使用了具有图像视图的recyclelerview。每个imageview都加载来自网络的图像,可以是正方形或宽度大于高度或高于宽度的高度,即任何尺寸。我将为每个图像显示占位符它在后台加载(带有进度条)。但问题是图像的尺寸未知,我想要将占位符的大小与图像的大小完全相同,例如9gag应用程序,其中占位符与图像的大小完全相同在bacground中加载。我如何在android中实现这一点?我不想使用wrap-content(在下载图像后产生刺耳效果)或者想要在imageview中使用特定高度(裁剪图像)我正在使用UIL,目前正计划改用Fresco或Picassa。

3 个答案:

答案 0 :(得分:1)

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

/**
 * 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.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);
  }
}

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

答案 1 :(得分:0)

您可以将图像尺寸与图像网址一起提供。 (我假设您从源代码获取图像列表,例如JSON文件或其他内容。)并根据ImageView的尺寸调整RecyclerView持有者的大小,然后触发图像下载过程。

答案 2 :(得分:0)

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

像这样:

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

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

不要忘记致电

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

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