2012-11-01 10 views
8

Io uso NineOldAndroids 2.4.0 per animare gli oggetti principalmente per il movimento e la trasformazione del controllo. Su Android 4.0 e soprattutto funziona bene, ma su versioni precedenti (2.1, 2.3) dopo che gli elementi di animazione non ricevono focus e non cliccabili. Codice campione:NineOldAndroids, visualizzazione non selezionabile dopo la rotazione o spostamento

View v = findViewById(R.id.button1); 
v.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     Toast.makeText(MainActivity.this, "Click!", Toast.LENGTH_SHORT).show(); 
    } 
}); 
ObjectAnimator moveDown = ObjectAnimator.ofFloat(v, "translationY", 100f); 
moveDown.setDuration(5000); 
moveDown.start(); 

Questo è un bug nella libreria o qualcosa che sto facendo male? Se questa libreria non supporta tutte le funzionalità di "API di animazione Honeycomb", nel mio progetto sarà inutile.

quotazione su Android Blog degli sviluppatori di "Animation in Honeycomb": Dato che il sistema sta effettivamente cambiando immobili in oggetti di destinazione, gli oggetti stessi sono cambiati, non solo il loro aspetto. Quindi quel bottone che muovi viene effettivamente spostato, non solo disegnato in un posto diverso. Puoi anche cliccarlo nella sua posizione animata. Vai avanti e fai clic su di esso; Ti sfido.

+0

Il frammento avete funziona bene per me con NineOldAndroid sul 2.3. Assicurati di aver importato com.nineoldandroids.animation.ObjectAnimator e non android.animation.ObjectAnimator. –

+1

Sì, ho importato com.nineoldandroids.animation.ObjectAnimator. Sei sicuro di poter premere il pulsante dopo lo spostamento? Come ho detto prima, questo non funziona per <3.0, l'ho provato sull'emulatore: 2.1.2.2, 2.3.3 e su un dispositivo reale (2.3.7) – avesha

+0

Ho avuto lo stesso problema. Hai provato a usare translateYBy() o x()? – Mario

risposta

7

Ora ho trovato la risposta: How to do interactive animation (translation) with Android

si dice che nineoldandroids ottenuto le stesse limitazioni come l'SDK nativo.

così la mia soluzione:

myAnim.setListener(new AnimatorListenerAdapter() { 
    @Override 
    public void onAnimationEnd (Animator nullPointer) { 
    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) child.getLayoutParams(); 
    params.bottomMargin += toYDelta; 
    params.leftMargin += toXDelta; 
    child.setLayoutParams(params); 
    } 
}); 
+3

Sì, questa è una limitazione della piattaforma. È necessario spostare fisicamente la vista quando l'animazione termina su pre-Honeycomb. –

+2

Nota che cambiare i margini di una vista per riposizionare la vista funziona bene se la vista viene spostata ** entro ** la sua genitrice, ma se hai bisogno di riposizionare la tua vista in modo che parte di essa si sposti al di fuori del riquadro di delimitazione del genitore, potresti incorrere in problemi di ridimensionamento della tua vista. –

Problemi correlati