2015-05-27 218 views
1

我正在開發技術繪圖應用程序,我需要添加一些工具來繪製線條,圓形,矩形和角落。現在我可以繪製線條和自由繪畫,但是我無法繪製圓形,矩形和角落。我在很多網站中發現瞭如何繪製它,但是靜態的,我的意思是,在你預先設置的位置或你觸摸的位置繪製形狀,但我需要知道如何繪製,例如,在位置I上的一個圓圈觸摸並使它比我分開我的手指更大。我希望你明白我的意思。繪製形狀動態

+0

你應該閱讀手勢 – runDOSrun

+0

我不知道如何實現手勢繪製。你知道任何教程或什麼?謝謝。 – malaka

回答

1

您可以有兩個變量x和y,然後每次觸摸屏幕時將x和y設置爲該值,同時繪製繪製座標爲x和y的圓。

如果您正在繪製並且只是想保留一個畫圓,您可以繪製該圓並將其添加到x和y的畫布中,然後在下一次觸摸屏幕時將在x上繪製新的圓y和舊的將保持着色。

您使用的是Canvas?如果是這樣,你可以找出如何做到這一點here (Canvas documentation)here (Bitmap documentation)。根據您的情況,您可以創建一個新的Bitmap並將其分配給Canvas,然後在Canvas上繪製並在位圖內部,您將獲得所需的圓形和其他形狀,並在下一個繪製框中繪製新形狀,並且更改將保留。

編輯:爲了使動態半徑遵循此邏輯,當您觸摸屏幕時,將x和y設置到該點(圓心),同時在屏幕上移動手指,計算半徑與x和y,如上圖所示,擡起手指時應用位圖上的圖形。

一些代碼:

public boolean onTouchEvent(MotionEvent e) 
{ 
    switch (e.getAction()) 
    { 
     case MotionEvent.ACTION_DOWN: 
      x = (int) event.getX(); 
      y = (int) event.getY(); 
      break; 
     case MotionEvent.ACTION_MOVE: 
      //If I'm not wrong this is how to calculate radius, 
      //I'm at work and can't test this now, you can use your way 
      int distanceX = (int) event.getX() -x; 
      int distanceY = (int) event.getY() -y; 
      radius = sqrt(distanceX *distanceX + distanceY *distanceY); 
      break; 
     case MotionEvent.ACTION_UP: 
      //Draw circle inside your bitmap here 

      //This is like a flag to notify the program that no new shape is being drawn 
      x = -1; 
      break; 
} 

public void draw(Canvas canvas) 
{ 
    canvas.drawBitmap(myBitmap, 0, 0, null); 

    //A new shape is being drawn 
    if (x != -1) 
     //In here you place a switch to decide which shape you are drawing 
     //for this example i assume circle 
     canvas.drawCircle(radius, x, y, paint); 
} 

當你擡起手指的新圈子應該在你的位圖畫,所以你不必添加額外的代碼爲每個新的循環。編輯2:我將用我描述的方法BitmapCanvas添加更多代碼。

Bitmap myBitmap; 
Canvas myCanvas; 

//Constructor 
public myActivity(Bundle bundle) //or whatever your constructor is 
{ 
    myBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
    myCanvas = new Canvas(myBitmap); 
} 

現在什麼,你的「myCanvas」畫將被應用到「設備無關」,當ACTION_UP激活畫圓圈這是對draw功能繪製「myCanvas」。

case MotionEvent.ACTION_UP: 
    myCanvas.drawCircle(radius, x, y, paint); 

    x = -1; 
    break; 
+0

我正在使用畫布。我正在閱讀,現在我可以繪製圓圈,但我想用動態半徑來繪製它。我讀taht [鏈接](http://stackoverflow.com/questions/8974088/how-to-create-a-resizable-rectangle-with-user-touch-events-on-android/17807469#17807469),但我不能繪製沒有球的矩形。任何想法? – malaka

+0

@AbelSuviri我編輯了我的答案和更多解釋 – TomTsagk

+0

我測試了你的代碼,並且改變了它以適應我的代碼,但它不能正常工作。我在屏幕左側出現一個大圓圈,我無法將它移動到位置,當我停止觸摸屏幕時,我在我觸及的位置出現一個小圓圈,大圓圈消失 – malaka