对于大部分app来说,在xml中指定drawee的属性即可,参见Fresco drawees xml属性一览表;
但有些时候,这些远远不够。
定制hierarchy
我们可以创建一个builder的实例,并赋值给view:
-
List<Drawable> backgroundsList;
-
List<Drawable> overlaysList;
-
GenericDraweeHierarchyBuilder builder =
-
new GenericDraweeHierarchyBuilder(getResources());
-
GenericDraweeHierarchy hierarchy = builder
-
.setFadeDuration(
300)
-
.setPlaceholderImage(
new MyCustomDrawable())
-
.setBackgrounds(backgroundList)
-
.setOverlays(overlaysList)
-
.build();
-
mSimpleDraweeView.setHierarchy(hierarchy);
需要注意的是,setHierarchy不要在同一个view上调用多次,即使这个view被回收了。hierarchy的多次创建是很耗性能的,我们可以通过setController或setImageURI来修改显示在它上面的图片。
直接修改hierarchy
我们可以在app运行时,直接修改hierarchy的属性值。首先我们需要从View获取hierarchy的引用:
GenericDraweeHierarchy hierarchy = mSimpleDraweeView.getHierarchy();
获取到view的hierarchy之后,就可以动态修改很多属性了,例如:
修改默认显示图片:
直接用res id
hierarchy.setPlaceholderImage(R.drawable.placeholderId);
或者用drawable:
-
Drawable drawable;
-
// create your drawable
-
hierarchy.setPlaceholderImage(drawable);
hierarchy.setActualImageScaleType(ScalingUtils.ScaleType.CENTER_INSIDE);
如果选择了fucusCrop,那么需要设置一个焦点
hierarchy.setActualImageFocusPoint(point);
同时,也可以给图片添加颜色过滤器(color filter)
-
ColorFilter filter;
-
// create your filter
-
hierarchy.setActualImageColorFilter(filter);
设置圆角(Rounding)
所有跟圆角相关的参数,除了rounding方法可以被修改,还可以从hierarchy获取RoundingParams对象,修改之后再设置回去。
-
RoundingParams roundingParams = hierarchy.getRoundingParams();
-
roundingParams.setCornersRadius(
10);
-
hierarchy.setRoundingParams(roundingParams);