2015-05-27 179 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