2013-02-28 4 views
0

J'essaie de tracer une ligne basée sur un événement tactile. Fondamentalement, il dessine une ligne lorsque le doigt bouge. Je reçois une erreur lors de la substitution de ontouchevent et onsizechanged. Il a été écrit à l'origine en Java. Je viens de le traduire en C#. Voici le code:Aucune méthode appropriée trouvée dans mes méthodes redéfinies mono pour android

protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     currentLevel = Intent.GetIntExtra("gameLevel", 0); 
     playerScore = Intent.GetIntExtra("score", 0); 
     SetContentView(new SampleView(this)); 


     // Create your application here 
    } 

    private class SampleView : View 
    { 
     private Paint mPaint; 
     private static Bitmap m_bitmap; 
     private DisplayMetrics m_metrics; 
     private Canvas m_canvas; 
     private Path m_path; 
     private Paint m_bitmapPaint; 
     private float m_X, m_Y; 
     static bool m_pathDrawn = false; 
     private static float TOUCH_TOLERANCE = 4; 

     public SampleView(Context context) 
      : base(context) 
     { 
      Focusable = true; 

      mPaint = new Paint(); 
      mPaint.AntiAlias = true; 
      mPaint.Dither = true; 
      mPaint.SetStyle(Paint.Style.Stroke); 
      mPaint.StrokeWidth = 12; 
      mPaint.StrokeJoin = Paint.Join.Round; 
      mPaint.StrokeCap = Paint.Cap.Round; 
      m_metrics = context.Resources.DisplayMetrics; 
      m_bitmap = Bitmap.CreateBitmap(m_metrics.WidthPixels, m_metrics.HeightPixels, Bitmap.Config.Argb8888); 
      m_canvas = new Canvas(m_bitmap); 
      m_bitmapPaint = new Paint(); 



     } 

     public void onerase() 
     { 
      m_canvas = null; 
     } 

     protected override void onSizeChanged(int p_w, int p_h, int p_oldw, int p_oldh) 
     { 
      this.onSizeChanged(p_w, p_h, p_oldw, p_oldh); 
     } 

     protected override void OnDraw(Canvas canvas) 
     { 
      canvas.DrawColor(Color.Black); 
      canvas.DrawBitmap(m_bitmap, 0, 0, m_bitmapPaint); 
      canvas.DrawPath(m_path, mPaint); 
     } 

     private void touch_start(float p_x, float p_y) 
     { 
      m_path.Reset(); 
      m_path.MoveTo(p_x, p_y); 
      m_X = p_x; 
      m_Y = p_y; 
     } 

     private void touch_move(float p_x, float p_y) 
     { 
      float m_dx = Math.Abs(p_x - m_X); 
      float m_dy = Math.Abs(p_y - m_Y); 
      if (m_dx >= TOUCH_TOLERANCE || m_dy >= TOUCH_TOLERANCE) 
      { 
       m_path.QuadTo(m_X, m_Y, (p_x + m_X)/2, (p_y + m_Y)/2); 
       m_X = p_x; 
       m_Y = p_y; 
       m_pathDrawn = true; 
      } 
     } 

     private void touch_up() 
     { 
      m_path.LineTo(m_X, m_Y); 
      // commit the path to our offscreen 
      m_canvas.DrawPath(m_path, mPaint); 
      // kill this so we don't double draw 
      m_path.Reset(); 
     } 

     public override bool onTouchEvent(MotionEvent p_event) 
     { 

      float m_x = p_event.GetX(); 
      float m_y = p_event.GetY(); 
      switch (p_event.Action) 
      { 
       case MotionEventActions.Down: 
        touch_start(m_x, m_y); 
        Invalidate(); 
        break; 
       case MotionEventActions.Move: 
        touch_move(m_x, m_y); 
        Invalidate(); 
        break; 
       case MotionEventActions.Up: 
        touch_up(); 
        Invalidate(); 
        break; 
      } 
      return true; 
     } 
    } 

Autre chose. Je veux faire ma vue d'image à partir d'une mise en page comme ma toile et dessiner la ligne là-dessus ontouchevent. Comment dois-je faire cela? Merci!

Répondre

0

Le nom de la méthode doit utiliser l'enveloppe pascal.

Android.Views.View.OnTouchEvent Method

Android.Views.View.OnSizeChanged Method

public override bool OnTouchEvent(MotionEvent e) 
{ 
} 

protected override void OnSizeChanged(int w, int h, int oldw, int oldh) 
{ 
} 

Mono coding guidelines.

+0

Donc, l'erreur se produit becuase j'utilise dans mes variables SOULIGNE de paramater? – ljpv14

+0

Le paramètre n'est pas un problème ici. En C#, le nom de la méthode est "pascal", donc c'est "OnTouchEvent" au lieu de "onTouchEvent". Regardez attentivement le premier caractère 'O' et' o'. :) –

+0

Je vois! Désolé, je n'ai pas remarqué ça. Merci! :) – ljpv14

Questions connexes