0

カスタムビューを始めたばかりです。ビューを作成し、レイアウトを n 回繰り返すようにしたいと思います。

次のコードでは、カスタム ビューは繰り返されません。さらに、ラベルとボタンの前に挿入すると、レンダリングされません。ただし、他の 2 つのコントロールの後にカスタム ビューを挿入すると、それらが表示されます。

onLayout などをいじってみましたが、成功しませんでした。

誰かが私を正しい方向に向けることができますか?

乾杯。

public class ThreeRects : View
{
    Paint _boxPaint;

    Paint _boxPaint2;

    Paint _boxPaint3;

    public ThreeRects (Context context): base(context)
    {
        this._boxPaint = new Paint (PaintFlags.AntiAlias);
        this._boxPaint.SetStyle (Paint.Style.Fill);
        _boxPaint.Color = Color.Aqua;

        this._boxPaint2 = new Paint (PaintFlags.AntiAlias);
        this._boxPaint2.SetStyle (Paint.Style.Fill);
        _boxPaint2.Color = Color.Red;

        this._boxPaint3 = new Paint (PaintFlags.AntiAlias);
        this._boxPaint3.SetStyle (Paint.Style.Fill);
        _boxPaint3.Color = Color.Blue;
    }

    protected override void OnDraw (Android.Graphics.Canvas canvas)
    {
        var rect = new RectF (0, 0, 50, 50);
        var rect2 = new RectF (50,  50, 100, 100);
        var rect3 = new RectF (100, 100, 150, 150);

        canvas.DrawRect (rect, this._boxPaint);
        canvas.DrawRect (rect2, this._boxPaint2);
        canvas.DrawRect (rect3, this._boxPaint3);

        base.OnDraw (canvas);
    }
}

[Activity (Label = "FertPinAndroid", MainLauncher = true)]
public class MainActivity : Activity
{
    protected override void OnCreate (Bundle bundle)
    {
        base.OnCreate(bundle);
        var layout = new LinearLayout (this);
        layout.Orientation = Orientation.Vertical;

        var aLabel = new TextView (this);
        aLabel.Text = "Hello World";

        var aButton = new Button (this);      
        aButton.Text = "Say Hello";
        aButton.Click += (sender, e) => {
            aLabel.Text = "Hello from the button";
        };  

        layout.AddView (new ThreeRects (this));
        layout.AddView (aLabel);
        layout.AddView (aButton);          
        layout.AddView (new ThreeRects (this));
        layout.AddView (new ThreeRects (this));

        SetContentView (layout);
    }
}
4

1 に答える 1

2

LinearLayout またはサブビューのレイアウト パラメータを指定しませんでした。私ならlayout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);、ThreeRects インスタンスごとに同じものを使用します。また、ThreeRects クラスをオーバーライドonMeasure(int,int)して、Android がそれをレイアウトに含める方法を理解できるようにする必要もあります。そのメソッドをオーバーライドしなかったため、それらが互いに重なって描画されている可能性があります。

于 2013-09-16T13:55:54.070 に答える