用Picasso将9补丁设置为imageView src

时间:2016-02-01 17:53:15

标签: android imageview picasso nine-patch

我有一个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);

以前有人试过做同样的事情吗? 谢谢,

2 个答案:

答案 0 :(得分:2)

我已经回答了我的问题,

我首先测试是否会显示9补丁,如果是,我将比例类型更改为FIT_XY。

但我会继续寻找更优雅的解决方案。因为告诉你是否会显示一个9补丁可能会很复杂,而且我宁愿拥有至少适用于我所有抽签的东西。

答案 1 :(得分:1)

好的,我用另一种方式解决了它并以这种方式工作。

  • 如果未加载数据 - &gt; show placeholder .9.png
  • IF数据已加载 - &GT;显示图片
  

在所有事情之前,我们应该使用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();
    }
}

blank_photo.9.png