2010-12-11 13 views
9

Quiero arrastrar y soltar la vista de texto en la imagen en android 2.Xarrastrar y soltar vista de texto en android

por favor, mira esta imagen a continuación. alt text

Aquí, el color "Azul" representa el ViewGrop, "Blanco" es ImageView y la imagen se establece en ImageView. el texto escrito "Moda" es un TextView. Así es como tengo que implementar la estructura. Ahora quiero permitir al usuario seleccionar TextView y arrastrarlo a cualquier parte de la imagen y luego colocarlo sobre la imagen en la posición deseada.

A partir de ahora como referencia, traté de referirme a la siguiente url pero cada vez que uso TextView en vez de Button, las cosas se vuelven anormales.

link text

¿Puede alguien darme la hoja de ruta o un ejemplo para hacerlo?

+0

Es mucho más fácil obtener respuestas a sus preguntas si realmente hace una pregunta. – CommonsWare

+0

ohh lo tengo, solo estoy pidiendo un mapa de ruta – Hunt

Respuesta

8

En su lugar, intente obtener su ImageView como un lienzo para dibujar.

ImageView CanvasView = (ImageView) findViewById(R.id.fashion_pic)

Desde aquí se puede crear su propio mapa de bits y volver a dibujar después de un TouchEvent. El siguiente fragmento contiene una solución temporal necesario para un error en 2.1 (o 2.2, no puedo recordar):

public void redrawImage() { 

    Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.fashion_pic); 
    Bitmap proxy = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(), Config.ARGB_8888); 
    Canvas c = new Canvas(proxy); 

    //Here, we draw the background image. 
    c.drawBitmap(bm, new Matrix(), null); 

    //Here, we draw the text where the user last touched. 
    c.drawText("Fashion", someGlobalXvariable, someGlobalYvariable, somePaint); 

    CanvasView.setImageBitmap(proxy); 
} 

Aquí, se ha creado un lienzo que ya tiene su imagen como fondo y las pinturas de texto en una variable xey. Ahora, acaba de establecer un OnTouchListener:

CanvasView.setOnTouchListener(new OnTouchListener(){ 

    public boolean onTouch(View v, MotionEvent e) { 

     someGlobalXvariable = e.getX(); 
     someGlobalYvariable = e.getY(); 
     redrawImage(); 
     return true; 
    } 
}); 

Como se puede ver, el oyente actualiza automáticamente la imagen cuando se toca, y el texto seguirá el dedo del usuario. Como está utilizando un mapa de bits como lienzo, también puede agregar soporte para guardar/cargar una imagen si su aplicación desea tener ese tipo de funcionalidad.

Editar: Puede ser más fácil de usar si mueve las líneas 1-3 de redrawImage() y las coloca en otro lugar, estableciendo esos objetos como objetos globales. Te dejaré jugar con eso.

+0

¿Necesito reciclar algo ya que el mapa de bits se está dibujando continuamente aquí? – Hunt

+0

es posible usar TextView en lugar de canvas.drawText, porque la calidad del texto es mucho mejor en comparación con drawText. – Hunt

+1

Pregunta 1: vea mi respuesta editada, debe mover esos objetos a otra parte. Pregunta 2: puede lograr exactamente el mismo aspecto con Canvas.drawText(). Intenta usar 'Paint.setAntialiasing()' – Snailer