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

Я создал пользовательский вид 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 будет содержать больше, чем рисовать круг. Мне нужно сделать его пользовательским.

Ответ 1

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

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

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

Ответ 2

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

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

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