Я разрабатываю приложение для технического рисования, и мне нужно добавить несколько инструментов для рисования линий, кругов, прямоугольников и углов. Теперь я могу рисовать линии и рисовать бесплатно, но я не могу рисовать круги, прямоугольники и углы. Я нашел во многих веб-сайтах, как рисовать, но статично, я имею в виду, нарисую фигуру в том месте, которое вы предварительно задали, или на том месте, где вы касаетесь, но мне нужно знать, как рисовать, например, круг в позиции I коснитесь и сделайте это больше, чем я отделяю пальцы. Надеюсь, вы понимаете, что я имею в виду.Рисование фигур динамическое
ответ
У вас могут быть две переменные 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;
Я использую холст. Я читал, и теперь я могу рисовать круг, но я хочу сделать его с динамическим радиусом. Я прочитал taht [link] (http://stackoverflow.com/questions/8974088/how-to-create-a-resizable-rectangle-with-user-touch-events-on-android/17807469#17807469), но я не могу рисуем прямоугольник без шариков. Есть идеи? – malaka
@AbelSuviri Я отредактировал свой ответ с большим количеством объяснений. – TomTsagk
Я тестирую ваш код, и я немного меняю его, чтобы он соответствовал моему коду, но он не работает должным образом. Я всегда вижу большой круг в левой части экрана, и я не могу переместить его в положение, и когда я перестаю касаться экрана, я получаю небольшой круг в положении, которое я коснулся, и большой круг исчезает – malaka
- 1. Рисование фигур с wxWidgets
- 2. Рисование динамических фигур
- 3. Рисование фигур внутри XAML?
- 4. рисование фигур на сетке
- 5. рисование фигур с SDL
- 6. рисование фигур с css
- 7. Рисование фигур в CSS
- 8. Рисование слоистых фигур
- 9. Рисование фигур внутри div
- 10. Рисование фигур в Java
- 11. Android: рисование пользовательских фигур
- 12. Рисование фигур на inkcanvas
- 13. Рисование фигур на холсте
- 14. Рисование фигур на панели
- 15. Рисование и наполнение фигур
- 16. Рисование фигур в указанном порядке
- 17. Рисование очертаний вокруг органических фигур
- 18. Рисование фигур в питона (черепаха)
- 19. Рисование фигур в Flex/Actionscript
- 20. Рисование нескольких фигур в WebGL
- 21. Рисование пользовательских фигур в Babylon.js
- 22. Рисование фигур со случайными цветами
- 23. Рисование фигур в css отзывчиво
- 24. Рисование фигур на холсте JavaFX
- 25. SFML C++ рисование вектора фигур
- 26. Рисование фигур со случайными цветами
- 27. Рисование фигур с "+, -, |" в Java
- 28. Рисование фигур с целью C
- 29. Рисование пикселей как пользовательских фигур
- 30. Рисование фигур на JForm java
Вы должны прочитать жесты – runDOSrun
Я не знаю, как реализовать жесты для рисования. Вы знаете какой-либо учебник или что-то еще? Благодарю. – malaka