Android 使用毕加索将9面片设置为imageView src
我有一个ImageView,从网络中加载图像(中间裁剪) 以前有人试过做同样的事情吗?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补丁有时会很复杂,我
谢谢,我已经部分回答了我的问题 我首先测试9面片是否会显示,如果是,我会更改比例类型do FIT_XY
但我会继续寻找更优雅的解决方案。因为告诉我是否会显示一个9补丁有时可能会很复杂,我希望有一些至少能与我所有的绘图设备一起使用的东西。我已经部分回答了我的问题 我首先测试9面片是否会显示,如果是,我会更改比例类型do FIT_XY
但我会继续寻找更优雅的解决方案。因为告诉我是否会显示一个9补丁有时会很复杂,我希望有一些东西至少能与我所有的绘图设备一起工作。好的,我用另一种方法解决了它,它就是这样工作的
- 如果未加载数据->显示占位符.9.png
- 如果数据已加载 ->显示图像
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
- 如果数据已加载 ->显示图像
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源