2012-01-24 12 views
3

メインアクティビティで作成されたDrawViewというカスタムビューがあります。私はDrawViewクラスにonDraw()メソッドを実装しており、最初は円を描きます。私はタッチリスナーを追加して、ユーザーがクリックすると正方形を描くようにしました。私はユーザーがクリックして正方形が描かれている部分までです。私はこれについてどうやって行くのか分からない。Android、メインアクティビティからの描画

public class TestActivity extends Activity { 
    DrawView drawing; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     ViewGroup myLayout = (ViewGroup) findViewById(R.id.mainLayout); 

     drawing = new DrawView(this); 
     myLayout.addView(drawing); 

     drawing.setOnTouchListener(new View.OnTouchListener() { 

      public boolean onTouch(View v, MotionEvent event) { 
       if (event.getAction() == MotionEvent.ACTION_DOWN) { 
        // draw a square 
       } 
       return true; 
      } 
     }); 
    } 

    private class DrawView extends View { 

     public DrawView(Context context) { 
      super(context); 
     } 

     protected void onDraw(Canvas canvas) { 
      Paint myPaint = new Paint(); 
      myPaint.setColor(Color.BLACK); 
      // draw a circle 
     } 
    } 
} 

ヘルプは大歓迎です。あなたは、元のクラスの機能上書きする必要が

答えて

2

は、四角形を描画するための簡単なスニペットですタッチリスナー火災の、ちょうどないsetOnTouchListener()

次いで後DrawViewクラスでこのコードを実装DrawViewクラス内のRect R =新規のRect()を定義することによってDrawViewクラスでオーバーライド

public boolean onTouch(View v, MotionEvent event) { 
    if (event.getAction() == MotionEvent.ACTION_DOWN) { 
     sx = event.getX(); 
     sy = event.getY(); 
     r.set(sx,sy,sx,sy); 
    }else if(event.getAction==MotionEvent.ACTION_UP){ 
     r.set(sx,sy,event.getX(),event.getY()); 
    }else if(event.getAction==MotionEvent.ACTION_MOVE){ 
     r.set(sx,sy,event.getX(),event.getY()); 
    } 
    invalidate(); 
    return true; 

}

ここではonDraw(ある)

public void onDraw(Canvas canvas){ 
    super.onDraw(canvas); 
    canvas.drawRect(r, new Paint()); 
} 
+0

私はこれを動作させると思っていますが、円を描く方法はありますか?円を取り除かずに四角形を描く方法はありますか?私。最初に円が描かれ、ユーザーがクリックしてから正方形があると、正方形と円の両方が表示されます。私はグーグル上を見回しましたが、描画されたものを追跡し、毎回すべてを描画するための配列を用意する必要がありますか?つまり、ShapesDraw = {円、正方形、三角形、正方形} 'を、onDrawメソッドのforループに配置しますか? – 1user1160804

0

:ダウンユーザー、上に移動してたときに、ここでviewObject.invalidateを(使用し、描画を強制的に

@Override 
public void onDraw(Canvas canvas 

)を

0
mPaint = new Paint(); 
    mPaint.setAntiAlias(true); 
    mPaint.setDither(true); 
    mPaint.setColor(Color.GREEN); 
    mPaint.setStyle(Paint.Style.STROKE); 
    mPaint.setStrokeJoin(Paint.Join.ROUND); 
    mPaint.setStrokeCap(Paint.Cap.ROUND); 
    mPaint.setStrokeWidth(5); 


    protected void onDraw(Canvas canvas) { 
     canvas.drawColor(Color.TRANSPARENT); 
     canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); 
     canvas.drawPath(mPath, mPaint); 
    } 
1

あなたはドローリスナーを作成することができます。

public interface OnDrawListener { 
    void onDraw(Canvas c); 
} 

... 

private class DrawView extends View { 
    private OnDrawListener onDrawListener; 

    public void setOnDrawListener(OnDrawListener onDrawListener) { 
     this.onDrawListener=onDrawListener; 
    } 

    @Override 
    protected void onDraw(Canvas c) { 
     onDrawListener.onDraw(c); 
    } 
} 

をして、リスナー上書き編集:

// onCreate 
drawing.setOnDrawListener(new OnDrawListener() { 
    @Override 
    public void onDraw(Canvas c) { 
     // draw circle 
    } 
}); 

を入力し、再度タッチイベントを使用して、それを上書きして四角形を描画します。

関連する問題