Изменить форму изображения в android
Я добился успеха в реализации функции увеличения/уменьшения масштаба и перетаскивания в изображениях на холсте.
Теперь то, что я хочу, - это изменение размера, чтобы изображения, подобные приведенным ниже, основывались на iPhone App ![enter image description here]()
Как изменить форму изображения с помощью iPhone SDK?
Итак, как я могу добиться такой функциональности в Android?
Ответы
Ответ 1
В принципе вам нужно сделать недействительным изображение и повторно рисовать на холсте с самого начала::
img=(ImageView)findViewById(R.id.yourimageidfromxml);
img.onTouchEvent(MotionEvent me)
{
int X=me.getX();
int Y=me.getY();
img.invalidate();
img.repaint(X,Y);
}
void paint(int X,int Y)
{
img.setWidth(X);
img.setHeight(Y);
}
Масштабирующее изображение преобразуется с помощью перерисовки на холсте с самого начала
Ответ 2
Если путем повторной калибровки вы ссылаетесь на "растяжение" растрового изображения на вертикальной и горизонтальной плоскостях, вы просто изменяете прямоугольник, в который втягивается форма (например, овал).
Например:
Это ваша первоначальная форма овала:
canvas.drawOval(new Rect(0,0,100,100), bluePaint);
Это тот же овал, просто растянутый (измененный) на горизонтальной плоскости:
canvas.drawOval(new Rect(0,0,200,100), bluePaint);
Надеюсь, это поможет.
Ответ 3
Существует два варианта, в которых используется пользовательское представление. Первый заключается в создании пользовательского представления, которое заполняет ваш "холст". Вы можете отслеживать 8 синих и 1 зеленые круги в представлении как объекты Rect
. Переопределите onTouchEvent(MotionEvent)
, а затем проверьте, находятся ли события движения в любом из ваших элементов управления и соответственно обновляют их (я немного упрощаю это здесь:)). Из вашего onTouchEvent вы бы назвали invalidate()
. Вы onDraw(Canvas)
можете обрабатывать чертежи элементов управления и обновлять изображение в соответствии с тем, как ваши элементы управления были изменены с момента последнего вызова onDraw.
Другой вариант - сделать что-то подобное, но с представлением, которое только инкапсулирует круг и элементы управления, а это означает, что для перемещения вида потребуется контейнер, который позволит виду изменения параметров макета. Для этого ваш метод onTouchEvent должен вызвать недействительность с этим видом макета, потому что ему нужно будет пересчитать размер и положение вашего представления. Это определенно будет сложнее, но в зависимости от того, что вы пытаетесь достичь, работая с отдельными представлениями, может быть лучше, чем сохранение представлений ваших кругов в коде в одном представлении.
Ответ 4
Изменение размера изображения может быть достигнуто с помощью простого ImageView с scaleType "fitXY".
Вам нужно добавить синие маркеры размера.
Изменение поворота изображения (зеленая рукоятка) может быть достигнуто с помощью:
public static Bitmap rotate(Bitmap src, float degree) {
// create new matrix
Matrix matrix = new Matrix();
// setup rotation degree
matrix.postRotate(degree);
// return new bitmap rotated using matrix
return Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, true);
}
Источник: http://xjaphx.wordpress.com/2011/06/22/image-processing-rotate-image-on-the-fly/
См. http://xjaphx.wordpress.com/learning/tutorials/ для получения дополнительных примеров обработки изображений для Android.