2012-09-05 21 views
10

Tuve éxito en la implementación de una función de acercar/alejar y arrastrar/soltar en imágenes en el lienzo.cambiar la forma de la imagen en android

Ahora lo que quiero es cambiar su tamaño, que imágenes como enlace de abajo que en base a iPhone App enter image description here

How to change shape of an image using iPhone SDK?

Entonces, ¿cómo puedo lograr ese tipo de funcionalidad en Android?

+1

No estoy seguro de por qué esto se sube a +4 en un minuto después de la publicación. ¿Puede un votante explicar qué hace que esta pregunta sea tan maravillosa? De todos modos, ¿qué has intentado todavía? –

+1

http://code.google.com/p/android-multitouch-controller/source/browse/demo/MTPhotoSortr/src/org/metalev/multitouch/photosortr/PhotoSorterView.java?r=3ef1fdcbebe4f016a03c4d956af4ecbf850a925a El uso de este enlace i han pellizcado con éxito las imágenes de entrada/salida en el lienzo. –

+0

@xitij también estoy buscando este tipo de problemas ..... si lo consigo ... seguramente te informaré ..... –

Respuesta

0

Hay dos opciones, ambas implican una vista personalizada. El primero es crear una vista personalizada que llene tu "lienzo". Puede realizar un seguimiento de 8 círculos azules y 1 círculos verdes en la vista como objetos Rect. Anule onTouchEvent(MotionEvent) y luego verifique si los eventos de movimiento se encuentran en alguno de sus controles y actualícelos en consecuencia (simplifico un poco las cosas aquí :)). Desde your onTouchEvent, debe llamar al invalidate(). Usted es onDraw(Canvas) y luego puede manejar dibujar los controles y actualizar la imagen de acuerdo a cómo han cambiado sus controles desde la última llamada a onDraw.

La otra opción es hacer algo similar, pero con una vista que solo encapsula el círculo y los controles, lo que significa que mover la vista requerirá un contenedor que permitirá que la vista cambie sus parámetros de diseño. Al hacer esto, su método onTouchEvent necesitaría desencadenar una invalidación con esa vista de diseño porque necesitaría volver a calcular el tamaño y la posición de su vista. Esto definitivamente sería más difícil, pero depender de lo que intente lograr trabajando con vistas individuales puede ser mejor que mantener las representaciones de sus círculos en código en una vista única.

1

Básicamente lo que necesita para invalidar la imagen y volver a dibujar en el lienzo desde el principio ::

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); 
} 

Escalamiento de la imagen se transformará usando volver a pintar sobre lienzo desde el principio

0

El cambio de tamaño de la imagen se puede lograr utilizando un simple ImageView con scaleType "fitXY".

Tiene que agregar los controladores de cambio de tamaño azules usted mismo.

Cambio de la rotación de la imagen (mango verde) se puede lograr mediante el uso de:

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); 
} 

Fuente: http://xjaphx.wordpress.com/2011/06/22/image-processing-rotate-image-on-the-fly/

Ver http://xjaphx.wordpress.com/learning/tutorials/ para ejemplos de procesamiento de imágenes más Android.

1

Si por cambia el tamaño se está refiriendo a "estirar" el mapa de bits en el plano vertical y horizontal, entonces simplemente modifica la rect que la forma (por ejemplo, oval) está siendo dibujada.

Por ejemplo:

Esta es su forma original de un óvalo:

canvas.drawOval(new Rect(0,0,100,100), bluePaint); 

Este es el mismo oval, simplemente estirado (cambiar de tamaño) en el plano horizontal:

canvas.drawOval(new Rect(0,0,200,100), bluePaint); 

Espero que esto ayude.

Cuestiones relacionadas