使用Fresco设置TextView的左侧drawable

3

为什么不在TextView的左侧使用一个ImageView来实现呢? - user2520215
1
@user2520215 我不想在层次结构中添加额外的视图。 - Adel Nizamuddin
你有用谷歌搜索吗?setCompoundIntrinsic blah blah blah,抱歉我忘记这个方法了。我现在刚刚搜索到了它。 - Elltz
你可以尝试扩展TextView,在左侧添加背景,并给它一个默认的paddingLeft大小:drawable的宽度。 - user2520215
1个回答

2
你不需要重写onDraw方法,因为TextView已经为你做了这件事。你可以像这样做:

您无需覆盖onDraw方法,因为TextView已经为您完成了此操作。您可以执行以下操作:

class MyTextView extends TextView {
  MultiDraweeHolder mMultiDraweeHolder;

  // called from constructors
  private void init() {
    mMultiDraweeHolder = new MultiDraweeHolder<GenericDraweeHierarchy>();
    GenericDraweeHierarchyBuilder builder = 
        new GenericDraweeHierarchyBuilder(getResources());
    for (int i = 0; i < 4; i++) {
      GenericDraweeHierarchy hierarchy = builder.reset()
        .set...
        .build();
      mMultiDraweeHolder.add(
          new DraweeHolder<GenericDraweeHierarchy>(hierarchy, getContext()));
  }

实际上设置URI和边界:

// build DraweeController as in Fresco docs
DraweeHolder<GenericDraweeHierarchy> holder = mMultiDraweeHolder.get(i);
holder.setController(controller);
holder.getTopLevelDrawable().setBounds(...)

将它们分配给您的TextView:
List<Drawable> drawables = new ArrayList<>();
for (int i = 0; i < 4; i++) {
  drawables.add(mMultiDraweeHolder.get(i).getTopLevelDrawable());
}
setCompoundDrawables(
    drawables.get(0), drawables.get(1), drawables.get(2), drawables.get(3));

您的TextView仍需要按照文档中的说明覆盖onDetachedFromWindow等方法,但您应该能够直接粘贴该代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接