没有合适的方法发现我的重写方法单声道为Android

问题描述:

我想绘制一个基于触摸事件的线。基本上它随着手指移动而画线。重写ontouchevent和onsizechanged时出现错误。它最初是用JAVA编写的。我只是把它翻译成C#。这里的代码:没有合适的方法发现我的重写方法单声道为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; 
     } 
    } 

另一件事。我想将布局中的图像视图作为画布,并在那里画出线条。我应该怎么做?谢谢!

方法名称应使用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

所以发生错误监守我用下划线在我paramater变量? – ljpv14 2013-03-01 01:22:45

+0

参数在这里不是问题。在C#中,方法名称是pascal套管,所以它是'OnTouchEvent'而不是'onTouchEvent'。仔细看看第一个字母“O”和“o”。 :) – 2013-03-01 01:33:18

+0

我明白了!对不起,我没有注意到。谢谢! :) – ljpv14 2013-03-01 03:26:08