原因:
Fresco 的圖片控件 SimpleDraweeView琉闪,寬高不能都是Wrap_Content邦泄。
Fresco 有做說(shuō)明:鏈接
問(wèn)題:
如果圖片是從網(wǎng)絡(luò)獲取删窒,或預(yù)先不知道其寬高的情況下
無(wú)法給圖片控件設(shè)置一個(gè)固定的寬高或者比例
解決辦法:
1.寬高可以設(shè)置wrap_content
2.在代碼中給SimpleDraweeView設(shè)置監(jiān)聽(tīng)
3.獲取到圖片后,觸發(fā)加載完成的回調(diào)方法(onFinalImageSet)顺囊,從圖片信息對(duì)象(ImageInfo)中知道其寬高肌索,再重新設(shè)置SimpleDraweeView的真實(shí)寬高。
具體代碼:
activity_fresco.xml:
<com.facebook.drawee.view.SimpleDraweeView
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Activity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fresco);
final SimpleDraweeView mSdvImg = (SimpleDraweeView)findViewById(R.id.sdv);
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setOldController(mSdvImg.getController())
.setControllerListener(new ControllerListener<ImageInfo>() {
@Override
public void onSubmit(String id, Object callerContext) {
}
@Override
public void onFinalImageSet(String id, ImageInfo imageInfo, Animatable animatable) {
adjustSdv(mSdvImg,imageInfo.getWidth(),imageInfo.getHeight());
}
@Override
public void onIntermediateImageSet(String id, ImageInfo imageInfo) {
}
@Override
public void onIntermediateImageFailed(String id, Throwable throwable) {
}
@Override
public void onFailure(String id, Throwable throwable) {
}
@Override
public void onRelease(String id) {
}
})
.setUri(Uri.parse(model.getPicUrl()))
.build();
mSdvImg.setController(controller);
}
private void adjustSdv(SimpleDraweeView image,int width,int height){
LinearLayout.LayoutParams params = (LayoutParams) image.getLayoutParams();
params.width = screenWidth;
params.height = (int) ((float)height/width * screenWidth);
image.setLayoutParams(params);
}