2010-12-11 19 views
9

Voglio trascinare e rilasciare la visualizzazione del testo sull'immagine in Android 2.Xtrascina la visualizzazione del testo in Android

per favore, guarda questa immagine qui sotto.

Qui, il colore "Blu" rappresenta il ViewGrop, "Bianco" è ImageView e l'immagine è impostata su ImageView. il testo scritto "Fashion" è un TextView. Ecco come ho implementato la struttura. Ora voglio consentire all'utente di selezionare il TextView e trascinarlo su qualsiasi parte dell'immagine e quindi rilasciarlo sopra l'immagine nella posizione desiderata.

A partire da ora per un riferimento ho cercato di riferire il seguente URL ma ogni volta che uso TextView invece di Button le cose stanno diventando anormali.

link text

qualcuno può darmi la mappa stradale o ad esempio per avere fatto?

+0

È molto più facile ottenere risposte alle tue domande se in realtà fai una domanda. – CommonsWare

+0

oh, ho capito, sto solo chiedendo una road map – Hunt

risposta

8

Invece, prova ad ottenere il tuo ImageView come una tela su cui disegnare.

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

Da qui è possibile creare il proprio bitmap e ri-disegnare dopo un TouchEvent. Il seguente frammento contiene una necessaria work-around per un bug in 2.1 (o 2.2, non ricordo):

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

Qui, si è creato una tela che ha già la tua foto come sfondo e le vernici di testo a una variabile xey. Ora, è sufficiente impostare un OnTouchListener:

CanvasView.setOnTouchListener(new OnTouchListener(){ 

    public boolean onTouch(View v, MotionEvent e) { 

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

Come si può vedere, l'ascoltatore aggiorna automaticamente l'immagine quando viene toccato, e il testo seguirà dito dell'utente. Dal momento che stai usando una bitmap come tela, puoi anche aggiungere il supporto per salvare/caricare un'immagine se la tua app vuole avere quel tipo di funzionalità.

Modifica: Può essere più efficiente per le prestazioni se si spostano le linee 1-3 da redrawImage() e le si posiziona altrove, impostando tali oggetti come oggetti globali. Ti lascio armeggiare con quello.

+0

Ho bisogno di riciclare qualcosa perché la bitmap viene continuamente disegnata qui? – Hunt

+0

è possibile utilizzare TextView anziché canvas.drawText, perché la qualità del testo è molto migliore rispetto a drawText. – Hunt

+1

Domanda 1: vedi la mia risposta modificata, dovresti spostare quegli oggetti altrove. Domanda 2: puoi ottenere esattamente lo stesso aspetto con Canvas.drawText(). Prova a usare 'Paint.setAntialiasing()' – Snailer

Problemi correlati