最近一直在用XUtils的图片加载功能,感觉性能非常好,但是最近遇到一个问题,就是我用
BitmapUtils的display方法加载图片之后显示的图片是自定义大小的,并不是平铺的,所以就开始研究源码,终于发现在BitmapLoadCallBack.java
代码中发现设置的真实原理
/*
* Copyright (c) 2013. wyouflf (wyouflf@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.eegets.peter.enclosure.network.bitmap.bitmap.callback;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.widget.ImageView;
import com.eegets.peter.enclosure.network.bitmap.bitmap.BitmapDisplayConfig;
public abstract class BitmapLoadCallBack<T extends View> {
/**
* Call back when start loading.
*
* @param container
* @param uri
* @param config
*/
public void onPreLoad(T container, String uri, BitmapDisplayConfig config) {
}
/**
* Call back when start loading.
*
* @param container
* @param uri
* @param config
*/
public void onLoadStarted(T container, String uri, BitmapDisplayConfig config) {
}
/**
* Call back when loading.
*
* @param container
* @param uri
* @param config
* @param total
* @param current
*/
public void onLoading(T container, String uri, BitmapDisplayConfig config, long total, long current) {
}
/**
* Call back when bitmap has loaded.
*
* @param container
* @param uri
* @param bitmap
* @param config
*/
public abstract void onLoadCompleted(T container, String uri, Bitmap bitmap, BitmapDisplayConfig config, BitmapLoadFrom from);
/**
* Call back when bitmap failed to load.
*
* @param container
* @param uri
* @param drawable
*/
public abstract void onLoadFailed(T container, String uri, Drawable drawable);
private BitmapSetter<T> bitmapSetter;
public void setBitmapSetter(BitmapSetter<T> bitmapSetter) {
this.bitmapSetter = bitmapSetter;
}
public void setBitmap(T container, Bitmap bitmap) {
if (bitmapSetter != null) {
bitmapSetter.setBitmap(container, bitmap);
} else if (container instanceof ImageView) {
((ImageView) container).setImageBitmap(bitmap);
} else {
container.setBackgroundDrawable(new BitmapDrawable(container.getResources(), bitmap));
}
}
<span style="color:#ff0000;"> public void setDrawable(T container, Drawable drawable) {
if (bitmapSetter != null) {
bitmapSetter.setDrawable(container, drawable);
} else if (container instanceof ImageView) {
((ImageView) container).setImageDrawable(drawable);
} else {
container.setBackgroundDrawable(drawable);
}
}</span>
public Drawable getDrawable(T container) {
if (bitmapSetter != null) {
return bitmapSetter.getDrawable(container);
} else if (container instanceof ImageView) {
return ((ImageView) container).getDrawable();
} else {
return container.getBackground();
}
}
}
如果设置的XML是ImageView时,会使用setImageDrawable方法,如果是非ImageView时,会使用setBackgroundDrawable方法,好吧,到这里问题找到了,解决起来也就容易了。
解决的办法,如果想让设置的图片平铺的话就用非ImageView的其他控件。