2015-05-27 5 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: Я добавлю еще код с помощью метода Bitmap и Canvas.

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» будет применяться к «MyBitMap», когда ACTION_UP активирует начертить круг на «myCanvas», который обращается на функции draw.

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

    x = -1; 
    break; 
+0

Я использую холст. Я читал, и теперь я могу рисовать круг, но я хочу сделать его с динамическим радиусом. Я прочитал taht [link] (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

Смежные вопросы