Android 使用毕加索将9面片设置为imageView src

Android 使用毕加索将9面片设置为imageView src,android,imageview,picasso,nine-patch,Android,Imageview,Picasso,Nine Patch,我有一个ImageView,从网络中加载图像(中间裁剪) 以前有人试过做同样的事情吗? 谢谢,我已经部分回答了我的问题 我首先测试9面片是否会显示,如果是,我会更改比例类型do FIT_XY 但我会继续寻找更优雅的解决方案。因为告诉我是否会显示一个9补丁有时可能会很复杂,我希望有一些至少能与我所有的绘图设备一起使用的东西。我已经部分回答了我的问题 我首先测试9面片是否会显示,如果是,我会更改比例类型do FIT_XY 但我会继续寻找更优雅的解决方案。因为告诉我是否会显示一个9补丁有时会很复杂,我

我有一个ImageView,从网络中加载图像(中间裁剪)

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

我已经部分回答了我的问题

我首先测试9面片是否会显示,如果是,我会更改比例类型do FIT_XY


但我会继续寻找更优雅的解决方案。因为告诉我是否会显示一个9补丁有时可能会很复杂,我希望有一些至少能与我所有的绘图设备一起使用的东西。

我已经部分回答了我的问题

我首先测试9面片是否会显示,如果是,我会更改比例类型do FIT_XY


但我会继续寻找更优雅的解决方案。因为告诉我是否会显示一个9补丁有时会很复杂,我希望有一些东西至少能与我所有的绘图设备一起工作。

好的,我用另一种方法解决了它,它就是这样工作的

  • 如果未加载数据->显示占位符.9.png
  • 如果数据已加载 ->显示图像
首先,我们应该创建带有目标的扩展ImageView

电话:

Picasso.with(getContext()).load(url).into((Target)imageViewTarget);
自定义图像视图:

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();
    }
}
公共类ImageViewTarget扩展ImageView实现目标{
公共ImageViewTarget(上下文){
超级(上下文);
}
公共ImageViewTarget(上下文、属性集属性){
超级(上下文,attrs);
}
公共ImageViewTarget(上下文上下文、属性集属性、int defStyleAttr){
super(上下文、attrs、defStyleAttr);
}
私有void setPlaceHolder(){
可提取d=null;
if(Build.VERSION.SDK\u INT

好的,我用另一种方法解决了它,它就是这样工作的

  • 如果未加载数据->显示占位符.9.png
  • 如果数据已加载 ->显示图像
首先,我们应该创建带有目标的扩展ImageView

电话:

Picasso.with(getContext()).load(url).into((Target)imageViewTarget);
自定义图像视图:

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();
    }
}
公共类ImageViewTarget扩展ImageView实现目标{
公共ImageViewTarget(上下文){
超级(上下文);
}
公共ImageViewTarget(上下文、属性集属性){
超级(上下文,attrs);
}
公共ImageViewTarget(上下文上下文、属性集属性、int defStyleAttr){
super(上下文、attrs、defStyleAttr);
}
私有void setPlaceHolder(){
可提取d=null;
if(Build.VERSION.SDK\u INT

为什么要对加载的位图使用
setBackground()
,它会拉伸图像,而不是缩放类型?是的,我今天注意到了这一点。更新答案。我想你忘了在9补丁的情况下将scaleType设置为FIT_XY。我想9patch会将自身大小调整到最大值。我用黑色点粘贴了9patch,描述了拉伸的内容。中心对象无论如何都会居中。好吧,那是因为它是背景而不是ImageView源。为什么对加载的位图使用
setBackground()
,它会拉伸图像,而不是缩放类型?是的,我今天注意到了这一点。更新答案。我想你忘了在9补丁的情况下将scaleType设置为FIT_XY。我想9patch会将自身大小调整到最大值。我用黑色点粘贴了9patch,描述了拉伸的内容。中心对象无论如何都会居中。这是因为它是背景而不是ImageView源