1

私は CustomSwitch を書いています。Switchから拡張されています。メソッドの状況によってはonDraw()、CustomSwitch をボタンとして描画したいと考えています。

いくつかのアプローチを試みましたが、どちらもうまくいきませんでした。((Button)this).draw(canvas);スタックオーバーフローが発生するonDraw()原因を呼び出すことはできません。CustomSwitch のクローンを作成するか、インフレートして Button にキャストしようとしましたが、これら 2 つの方法のいずれも機能しませんでした。

CustomSwitch をボタンとして描画する方法を別のアイデアを持っている人はいますか?

4

1 に答える 1

1

わかりました、これが私がしたことです。

private Button drawButton;
public CustomSwitch(Context context) {
    super(context);
    this.drawButton = new Button(context);
}
public CustomSwitch(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.drawButton = new Button(context, attrs);
}
public CustomSwitch(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    this.drawButton = new Button(context, attrs, defStyle);
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    this.drawButton.measure(widthMeasureSpec, heightMeasureSpec);
};
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
    super.onLayout(changed, left, top, right, bottom);
    this.drawButton.layout(left, top, right, bottom);
};
@Override
protected void onDraw(android.graphics.Canvas canvas) {
    //...
    if(condition) {
        this.drawButton.draw(canvas);
    }
}
于 2012-10-16T09:12:08.653 に答える