Холст не рисует в пользовательском представлении
Я создал пользовательский вид 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?
}