我有一个ImageView,我从网络加载图像(中心裁剪)
<ImageView
android:id="@+id/content_image_view"
android:layout_width="match_parent"
android:layout_height="160dp"
android:scaleType="centerCrop"
android:src="@drawable/course" />
一个对象来到我的适配器,带有一个int(本地drawable的id),有时也是一个url。
如果url为null我加载局部drawable,可以是9补丁。 然后我的9个补丁显示为缩放。
我现在尝试了不同的东西:
ApiController.getInstance().tokenedPicasso.with(holder.contentImageView.getContext())
.load(formatted.contentImageUrl)
.placeholder(formatted.contentPlaceHolderId)
.centerCrop()
.fit()
.config(Bitmap.Config.RGB_565)
.into(holder.contentImageView);
以前有人试过做同样的事情吗? 谢谢,
答案 0 :(得分:2)
我已经回答了我的问题,
我首先测试是否会显示9补丁,如果是,我将比例类型更改为FIT_XY。
但我会继续寻找更优雅的解决方案。因为告诉你是否会显示一个9补丁可能会很复杂,而且我宁愿拥有至少适用于我所有抽签的东西。
答案 1 :(得分:1)
好的,我用另一种方式解决了它并以这种方式工作。
在所有事情之前,我们应该使用Target创建扩展的ImageView。
通话:
Picasso.with(getContext()).load(url).into((Target)imageViewTarget);
自定义ImageView:
public class ImageViewTarget extends ImageView implements Target {
public ImageViewTarget(Context context) {
super(context);
}
public ImageViewTarget(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ImageViewTarget(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
private void setPlaceHolder() {
Drawable d = null;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1) {
d = getResources().getDrawable(R.drawable.blank_photo);
} else {
d = getResources().getDrawable(R.drawable.blank_photo, getContext().getTheme());
}
if(d!=null) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
setBackgroundDrawable(d);
} else {
setBackground(d);
}
}
setPadding(0, 0, 0, 0);
}
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
setImageDrawable(new BitmapDrawable(getResources(), bitmap));
setScaleType(ScaleType.CENTER_CROP);
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
//...
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
setPlaceHolder();
}
}