2016-04-01 20 views
0

Xamarin.Android kullanıyorum ve List adresinden TouchEvent tarafından doldurulmuş olan daireler çizmek istiyorum. _points önceden tanımlanmış olduğunda sadece çalışırListeden noktalar çizilemiyor

public class Ceiling : View 
{ 
    private List<PointF> _points; 
    private Canvas _canvas; 
    private Paint paint; 

    protected Ceiling(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer) 
    { 
    } 

    public Ceiling(Context context) : base(context) 
    { 
     _points = new List<PointF>(); 
     paint = new Paint 
     { 
      Color = Color.Red 
     }; 
     paint.SetStyle(Paint.Style.Fill); 

     Touch += OnTouch; 
    } 



    public Ceiling(Context context, IAttributeSet attrs) : base(context, attrs) 
    { 
    } 

    public Ceiling(Context context, IAttributeSet attrs, int defStyleAttr) : base(context, attrs, defStyleAttr) 
    { 
    } 

    public Ceiling(Context context, IAttributeSet attrs, int defStyleAttr, int defStyleRes) : base(context, attrs, defStyleAttr, defStyleRes) 
    { 
    } 

    protected override void OnDraw(Canvas canvas) 
    { 
     base.OnDraw(canvas); 
     if (_canvas == null) 
     { 
      _canvas = canvas; 
      Background = new PaintDrawable(Color.AliceBlue); 
      canvas.SetViewport(Width, Height); 
     } 

     base.OnDraw(canvas); 
     if (_points.Count > 0) 
     { 
      foreach (var point in _points) 
      canvas.DrawCircle(point.X, point.Y, 10, paint); 
     } 
    } 

    private void OnTouch(object sender, TouchEventArgs e) 
    { 
     switch (e.Event.Action) 
     { 
      case MotionEventActions.Down: 
      { 
       var point = new PointF(e.Event.GetX(), e.Event.GetY()); 
       if (!_points.Contains(point)) 
       { 
        _points.Add(point); 
         _canvas.DrawCircle(point.X, point.Y, 10, paint); 
       } 
       break; 
      } 
     } 

    } 
} 

: İşte benim kodudur. Bu işi nasıl yapabilirim?

+0

Taşı alan tanımlamak yere kurucuda _points' 'başlatılması . –

+0

Çalışmıyor. –

+0

Neyin yanlış gittiğini açıklamanız gerekiyor. –

cevap

1

Birden çok kurgun var ve bunlardan yalnızca biri özel değişkenleri başlatıyor. Kurucunun çağrılan kişi olduğundan emin misiniz (Bunun bir düzenden başlatıldığını varsayalım)? Her durumda

Eğer tüm işlerinde çağrı böylece ayrı bir yönteme başlatma hareket daha iyi olur:

protected Ceiling(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer) 
    { 
     // need to call init here as well? 
    } 

    public Ceiling(Context context) : base(context) 
    { 
     Init(); 
    } 

    public Ceiling(Context context, IAttributeSet attrs) : base(context, attrs) 
    { 
     Init(); 
    } 

    public Ceiling(Context context, IAttributeSet attrs, int defStyleAttr) : base(context, attrs, defStyleAttr) 
    { 
     Init(); 
    } 

    public Ceiling(Context context, IAttributeSet attrs, int defStyleAttr, int defStyleRes) : base(context, attrs, defStyleAttr, defStyleRes) 
    { 
     Init(); 
    } 

    private void Init() 
    { 
     _points = new List<PointF>(); 
     this.paint = new Paint 
     { 
      Color = Color.Red 
     }; 
     this.paint.SetStyle(Paint.Style.Fill); 

     Touch += OnTouch; 
    }