Autore Topic: Bottone scalato, area sensibile non aggiornata  (Letto 473 volte)

Offline grg79

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Tab
  • Sistema operativo:
    Mac OS X 10.8
Bottone scalato, area sensibile non aggiornata
« il: 10 Giugno 2013, 12:35:57 CEST »
0
Buongiorno

Uso una classe ZoomableRelativeLayout che estende appunto un RelativeLayout e lo rende scalabile (zoommabile).
Lo zoom avviene attraverso un classico pinchzoom e quindi la vista scala tenendo fisso il punto in cui sono state appoggiate le dita al primo tocco.
Il componente contiene altri vari oggetti (pulsanti, immagini ecc.)
Anche gli oggetti all'interno del componente vengono scalati.

Il problema è che i Button vengono scalati come dimensione e grafica.
Ma non reagiscono al tocco.
L'area sensibile del tocco rimane posizionata nel punto originale in cui si trovava il pulsante.

Ho provato, fra le varie cose, a scorrere tutti gli oggetti a fine zoom e richiedere un Invalidate() e un RequestLayout()... ma i pulsanti dopo lo zoom continuano a non funzionare.

Offline rs94

  • Utente normale
  • ***
  • Post: 227
  • Respect: +21
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia Arc S
  • Sistema operativo:
    Windows 8
Re:Bottone scalato, area sensibile non aggiornata
« Risposta #1 il: 10 Giugno 2013, 14:32:42 CEST »
0
Non so come hai gestito l'animazione di scaling, ma provo a darti un suggerimento.
Se l'animazione avviene tramite classe animation succede quanto descritto da te perchè non sposta l'oggetto in se ma solo dove viene disegnato.
Da android 3.0 è stata introdotta la classe ObjectAnimator, che muove fisicamente tutto l'oggetto.
Quindi dovresti usare quella.... Per la retro-compatibilità c'è la libreria http://nineoldandroids.com/
L'unica certezza è il dubbio.
Dubitare di se stessi è il primo segno di intelligenza.

Offline grg79

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Tab
  • Sistema operativo:
    Mac OS X 10.8
Re:Bottone scalato, area sensibile non aggiornata
« Risposta #2 il: 11 Giugno 2013, 08:24:15 CEST »
0
Grazie per la risposta!

In realtà non uso la classe animation.
Rilevo gli OnTouchEvent e calcolo la proporzione di zoom.
Poi in onDraw (fra le altre cose) uso questi comandi:

canvas.Translate(mPosX, mPosY);
canvas.Scale(mScaleFactor, mScaleFactor);

base.OnDraw(canvas);

Questo scala e riposiziona il fondo (che è appunto un RelativeLayout).
Poi passo con un ciclo tutti gli oggetti contenuti e su ognuno eseguo:

child.RequestLayout ();
child.Invalidate ();

Il risultato grafico è corretto.... invece al punto di vista funzionale l'area sensibile dei pulsanti non si sposta.
Dove sbaglio?