Autore Topic: TranslateAnimation blocca i button del layout  (Letto 916 volte)

Offline SalvatoreAD

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Google+
    • Salvatoreadde
    • Mostra profilo
  • Dispositivo Android:
    Nexus 7 2012
  • Sistema operativo:
    linux mint 11, windows 7, windows phone 8, android 4.4.4
TranslateAnimation blocca i button del layout
« il: 16 Ottobre 2012, 15:41:38 CEST »
0
Salve ragazzi, ho questo problema: sto realizzando un app usando api 15 ( min api 9 ) formato da una sola attività e due layout relativi. Il primo è quello che si vede appena si avvia l'app, il secondo è nascosto. Con un button presente nel primo layout mi fa comparire il secondo layout con una translate animation. Il problema che sorge è che il secondo layout ha tutti gli elementi interni (button e altro) non cliccabili.

Codice (Java): [Seleziona]
h = (ImageView) findViewById(R.id.h); //bottone presente nel layout 1
                dett =(RelativeLayout)findViewById(R.id.dettagli); //secondo layout
                chiudi = (ImageView)findViewById(R.id.close); //botton presente nel layout 2

                moveRighttoLeft = new TranslateAnimation(0, -600, 0, 0);
                moveRighttoLeft.setDuration(1000);
                moveRighttoLeft.setFillAfter(true);

                h.setOnClickListener(new OnClickListener() {

                        public void onClick(View v) {
                                dett.setBackgroundColor(Color.YELLOW);
                                dett.startAnimation(moveRighttoLeft);
                        }

                });

                chiudi.setOnClickListener(new OnClickListener() { //non riconosce questo listener, il button sembra non cliccabile
                        public void onClick(View v) {
                                System.out.println("Chiuditi Dannazione!!");
                                moveLefttoRight = new TranslateAnimation(0, 600, 0, 0);
                                moveLefttoRight.setDuration(1000);
                                moveLefttoRight.setFillAfter(true);
                                dett.startAnimation(moveLefttoRight);
                        }

                });

Questo è l'xml

Codice (XML): [Seleziona]
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:background="@drawable/back" >

    <ImageView
       android:id="@+id/h"
       android:layout_width="52dp"
       android:layout_height="58dp"
       android:layout_alignParentLeft="true"
       android:layout_alignParentTop="true"
       android:layout_marginLeft="79dp"
       android:layout_marginTop="35dp"
       android:contentDescription="@string/idrogeno"
       android:src="@drawable/h" />

    <RelativeLayout
       android:id="@+id/dettagli"
       android:layout_width="450dp"
       android:layout_height="match_parent"
       android:layout_alignParentRight="true"
       android:layout_alignParentTop="true"
       android:layout_marginRight="-400dp" >

        <ImageView
           android:id="@+id/close"
           android:layout_width="40dp"
           android:layout_height="40dp"
           android:layout_alignParentTop="true"
           android:contentDescription="@string/close"
           android:src="@drawable/close" />

        <EditText
           android:id="@+id/editText1"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_below="@+id/close"
           android:layout_centerHorizontal="true"
           android:layout_marginTop="45dp"
           android:ems="10" >

            <requestFocus />
        </EditText>
    </RelativeLayout>

</RelativeLayout>

il layout è nascosto mediante un valore negativo, ho provato anche senza il numero negativo, ma cmq dopo l'animazione il button interno on funziona

Ringrazio in anticipo chi mi sa aiutare....

Offline eagledeveloper

  • Translate Team
  • Utente senior
  • ****
  • Post: 517
  • Respect: +37
    • Google+
    • 347516210
    • dark_pinz
    • @WandDStudios
    • Mostra profilo
    • W&D Studios
  • Dispositivo Android:
    HTC One X e HTC One
  • Play Store ID:
    W%26D+Studios
  • Sistema operativo:
    Ubuntu / Windows 7
Re:TranslateAnimation blocca i button del layout
« Risposta #1 il: 13 Maggio 2013, 08:32:01 CEST »
0
Mi sono imbattuto nello stesso problema. Su dispositivi 2.3.3 ho il problema mentre du dispositivi 4.1 no.

Il problema non é la cliccabilità della View ma sembra che una volta effettuata l'animazione il focus della View si trova ancora nella posizione iniziale.

Io ad esempio ho fatto semplice prova, ho messo una edittext ed un bottone. Quando premo il botto la edittext si muove verso di basso di x pixel. All'inizio e durante la transazione la edittext è interagibile, alla fine della transazione no. Però se premo nella posizione originale della edittext si apre la tastiera e si puo' scrivere, solo che quello che si scrive non si vede. Rimettendo la edittext nella posizione originale tutto funziona e vedo il testo scritto.

Se trovo una soluzione (spero) faccio sapere, saluti.

Post unito: 13 Maggio 2013, 08:47:40 CEST
Brutte notizie:

Citazione
Another disadvantage of the view animation system is that it only modified where the View was drawn, and not the actual View itself. For instance, if you animated a button to move across the screen, the button draws correctly, but the actual location where you can click the button does not change, so you have to implement your own logic to handle this.

Fonte: http://developer.android.com/guide/topics/graphics/prop-animation.html#property-vs-view
« Ultima modifica: 13 Maggio 2013, 08:47:40 CEST da eagledeveloper, Reason: Merged DoublePost »
I numeri contano molto di più del seme.

Offline rs94

  • Utente normale
  • ***
  • Post: 227
  • Respect: +21
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia Arc S
  • Sistema operativo:
    Windows 8
Re:TranslateAnimation blocca i button del layout
« Risposta #2 il: 13 Maggio 2013, 09:18:43 CEST »
0
Come già detto la TranslateAnimation sposta la posizione del disegno e non della view stessa.
Per spostare il tutto devi usare ObjectAnimator, introdotto in android 3.0
Per la retrocompatibilità usa NineOldAndroid :)
L'unica certezza è il dubbio.
Dubitare di se stessi è il primo segno di intelligenza.

Offline eagledeveloper

  • Translate Team
  • Utente senior
  • ****
  • Post: 517
  • Respect: +37
    • Google+
    • 347516210
    • dark_pinz
    • @WandDStudios
    • Mostra profilo
    • W&D Studios
  • Dispositivo Android:
    HTC One X e HTC One
  • Play Store ID:
    W%26D+Studios
  • Sistema operativo:
    Ubuntu / Windows 7
Re:TranslateAnimation blocca i button del layout
« Risposta #3 il: 13 Maggio 2013, 10:13:58 CEST »
0
E' quello che sto facendo, pero' anche con nineoldandroid su device 2.3.3 non funziona...
I numeri contano molto di più del seme.