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