2012-01-24 77 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

這裏是繪製矩形,當用戶下簡單的代碼片段,移動和向上觸摸聽者火,就在drawView函數類中重寫不是setOnTouchListener()

定義drawView函數類的矩形R =新的矩形(),然後實施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

我想我已經得到了這個工作,但是,有沒有一種繪製圓的方法,然後繪製廣場沒有刪除圓?即最初繪製一個圓,用戶點擊,然後有一個正方形,顯示正方形和圓形。我在谷歌環顧四周,我是否必須有某種數組來跟蹤已繪製的內容,並且每次都重繪所有內容?即'Shapes [] ShapesDrawn = {circle,square,triangle,square}',將它放在on循環中的onDraw方法? – 1user1160804

0

你必須覆蓋原來的類功能:

@Override 
public void onDraw(Canvas canvas 

要強制圖紙,使用viewObject.invalidate()

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 
    } 
}); 

然後再次觸摸事件並重寫它以繪製正方形。