Холст не рисует в пользовательском представлении

Я создал Custom View CircleView следующим образом:

public class CircleView extends LinearLayout { Paint paint1; public CircleView(Context context) { super(context); init(); } public CircleView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public void init() { paint1 = new Paint(); paint1.setColor(Color.RED); } protected void onDraw(Canvas canvas) { //super.onDraw(canvas); canvas.drawCircle(50, 50, 25, paint1); this.draw(canvas); } } 

Затем я включил его в макет моего ресурса root <RelativeLayout> :

  <com.turkidroid.test.CircleView android:id="@+id/circle_view" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_centerInParent="true" /> 

Однако ничего не было!

  • Правильно ли я реализую пользовательский вид?
  • Или я использовал пользовательский вид?

Информация:

  • Оба CircleView и MyActivity находятся в одном пакете: com.turkidroid.test .
  • В onDraw() я попытался включить super.onDraw() и прокомментировать его.
  • Я знаю, что могу нарисовать круг с гораздо более простыми подходами, но мой CircleView будет содержать больше, чем рисовать круг. Мне нужно сделать это Custom View.

Solutions Collecting From Web of "Холст не рисует в пользовательском представлении"

Ваш метод onDraw никогда не вызывается, вам нужно вызвать setWillNotDraw (false) в конструкторе вашего пользовательского представления, чтобы на самом деле вызвать onDraw.

Как указано в Android SDK:

Если это представление не делает никакого чертежа самостоятельно, установите этот флаг, чтобы разрешить дальнейшую оптимизацию. По умолчанию этот флаг не установлен в представлении, но может быть установлен в некоторых подклассах вида, таких как ViewGroup. Как правило, если вы переопределяете onDraw (android.graphics.Canvas), вы должны очистить этот флаг.

Где ваш this.draw() ?

Это должно работать окончательно:

 protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawCircle(50, 50, 25, paint1); //this.draw(canvas); where is this method? }