Размеры пользовательского вида, состоящего из формы, которую можно нарисовать - PullRequest
0 голосов
/ 23 декабря 2011

Я в значительной степени следую примеру, найденному в: http://developer.android.com/guide/topics/graphics/2d-graphics.html#shape-drawable

  public class CustomDrawableView extends View {

  private ShapeDrawable mDrawable;

  public CustomDrawableView(Context context, AttributeSet attr) {
  super(context, attr);

  int x = 10;
  int y = 10;
  int width = 300;
  int height = 50;

  mDrawable = new ShapeDrawable(new OvalShape());
  mDrawable.getPaint().setColor(0xff74AC23);
  mDrawable.setBounds(x, y, x + width, y + height);
  }

  protected void onDraw(Canvas canvas) {
  mDrawable.draw(canvas);
  }
  }

  // XML snippet where I am using this custom view
  <com.example.shapedrawable.CustomDrawableView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"/>

Я на самом деле использую это в ListView, поэтому он становится раздутым в методе getView моего адаптера (я знаю, что это работает, потому что этовыглядит отлично для нестандартных представлений).

Я заметил, что если я не укажу значение "dp" для layout_width и layout_height, он не будет отрисовываться.Однако, если я использую что-то произвольное, например, 500dp для layout_width и layout_height, то оно появляется!Я очень озадачен - почему он не использует измерения высоты / ширины, которые я указываю в коде, когда я использую wrap_content?

1 Ответ

1 голос
/ 24 декабря 2011

Оказывается, мне пришлось переопределить onMeasure и вернуть измерения моего рисования.Я использовал LabelView APIDemo в качестве примера.

...