3

このガイドを使用して、しばらくの間これに苦労してきました:

http://frescolib.org/docs/writing-custom-views.html

しかし、独自の onDraw メソッドを作成することをお勧めします。TextView の複合ドローアブルを設定したいだけです。それ、どうやったら出来るの?

4

1 に答える 1

2

TextView が既にそれを行っているため、onDraw をオーバーライドする必要はありません。次のようなことができます。

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 およびその他のメソッドをオーバーライドする必要がありますが、そのコードをそのまま貼り付けることができるはずです。

于 2015-05-29T11:19:04.940 に答える