0

私は描画アプリと拡張に取り組んでおり、ViewOnTouchListener を実装したいと考えています。コードは次のとおりです。

public class DoodleView extends View implements OnTouchListener  //ERROR1
{
   private Bitmap bitmap; // drawing area for display or saving
   private Canvas bitmapCanvas; // used to draw on bitmap
   private Paint paintScreen; // use to draw bitmap onto screen
   private Paint paintLine; // used to draw lines onto bitmap

   private Path    mPath;
   private Paint   mPaint, circlePaint, outercirclePaint;  
   private ArrayList<Path> paths = new ArrayList<Path>();
   private ArrayList<Path> undonePaths = new ArrayList<Path>();
   private float xleft,xright,xtop,xbottom;
   private float mX, mY;

   // DoodleView constructor initializes the DoodleView
   public DoodleView(Context context) 
   {
      super(context); // pass context to View's constructor
      this.context_new=context;
      this.setOnTouchListener(this); //ERROR2

      paintScreen = new Paint(); // used to display bitmap onto screen

      // set the initial display settings for the painted line
      paintLine = new Paint();
      paintLine.setAntiAlias(true); // smooth edges of drawn line
      paintLine.setColor(Color.BLACK); // default color is black
      paintLine.setStyle(Paint.Style.STROKE); // solid line
      paintLine.setStrokeWidth(5); // set the default line width
      paintLine.setStrokeCap(Paint.Cap.ROUND); // rounded line ends

      mPath = new Path();
      paths.add(mPath);

   } // end DoodleView constructor

OnSizeChanged:

   @Override
   public void onSizeChanged(int w, int h, int oldW, int oldH)
   {
      super.onSizeChanged(w, h, oldW, oldH);
      DoodlzViewWidth = w;     
      DoodlzViewHeight = h;

      bitmap = Bitmap.createBitmap(getWidth(), DoodlzViewHeight, Bitmap.Config.ARGB_8888);

      bitmapCanvas = new Canvas(bitmap);
      bitmap.eraseColor(Color.WHITE); // erase the BitMap with white 
   } 

onDraw:

   @Override
   protected void onDraw(Canvas canvas)
   {
       canvas.drawBitmap(bitmap, 0, 0, paintScreen); // draw the background screen
       // for each path currently being drawn
       for (Path p : paths){canvas.drawPath(p, paintLine);}
       Toast.makeText(getContext(), "ondraw", Toast.LENGTH_SHORT).show();              
   } 

onTouchEvent:

   @Override
   public boolean onTouchEvent(View arg0, MotionEvent event) //ERROR3
   {

          float x = event.getX();
          float y = event.getY();

          switch (event.getAction())
          {
              case MotionEvent.ACTION_DOWN:
                  touchStarted(x, y);
                  invalidate();
                  break;
              case MotionEvent.ACTION_MOVE:
                  touchMoved(x, y);
                  invalidate();
                  break;
              case MotionEvent.ACTION_UP:
                  touchEnded();
                  invalidate();
                  break;
          }
          return true;
    }

しかし、私は本当に頭を悩ませ、その理由がわかりません

  1. ERROR1: OnTouchListener レポートを実装すると OnTouchListener cannot be resolved to a type、赤い下線が表示され、インポートが提案されandroid.view.Viewます。しかし、まだインポートされたくないので、クリックしてインポートしようとしましたが、インポートリストが既に表示されています

  2. ERROR2: The method setOnTouchListener(View.OnTouchListener) in the type View is not applicable for the arguments (DoodleView)、エラー 1 が原因である必要があります

  3. ERROR3:The method onTouchEvent(View, MotionEvent) of type DoodleView must override or implement a supertype methodも、ERROR1 が原因である必要があります。

何が起こっているか知っている人はいますか?動けずにここで立ち往生!どうもありがとう!

4

1 に答える 1

3

単純なインポートの問題のようです。追加してみる

import android.view.View

クラスにまだ存在しない場合は、次のようにクラス宣言を変更します。

public class DoodleView extends View implements View.OnTouchListener {
....
于 2013-02-19T12:32:34.457 に答える