2015-01-30 8 views
7

Sto provando a utilizzare il nuovo CardView di Android in un'animazione di rotazione. Tuttavia, quando la proprietà rotationY di CardView è impostata su abbastanza alta, alcune cose veramente brutte si verificano sui dispositivi Lollipop. Ecco qualche esempio di codice che è abbastanza facile da compilare:CardView visualizza gli artefatti quando RotazioneY> 60

MainActivity.java:

public class MainActivity extends Activity { 

    private CardView mTestView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mTestView = (CardView) findViewById(R.id.test_view); 

     mTestView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       mTestView.animate() 
         .rotationY(360) 
         .setDuration(3000); 
      } 
     }); 
    } 
} 

activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" > 

    <android.support.v7.widget.CardView 
     android:layout_width="300dp" 
     android:layout_height="300dp" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true" 
     android:id="@+id/test_view"> 
    </android.support.v7.widget.CardView> 
</RelativeLayout> 

Dopo aver cliccato sulla vista, vedrete una rotazione ordinata animazione completa con le ombre di Material Design e tutto. Ma una volta che l'angolo di rotazione della carta diventa superiore a circa 60, interromperà il rendering, o renderà diversi fotogrammi senza cancellare il fotogramma precedente o una combinazione dei due. Questo continua fino a quando l'angolo della carta è tornato sotto questa soglia.

Ora, questa animazione è impostata in 3 secondi, il che è ridicolo. A una velocità di animazione più realistica (ad esempio, durata dell'animazione 300 ms) questo è ancora visibile, ma in realtà sembra solo un microstutter temporaneo.

Sembra un possibile errore nel framework - ma potrebbe anche essere che ho bisogno di chiamare qualche metodo aggiuntivo per consentire alla rotazione di partire senza problemi. Idee?

Nota: l'impostazione della distanza della telecamera chiamando View.setCameraDistance() non risolve il problema; infatti se si compila il codice sopra con una distanza follemente alta (~ 100.000), il problema si verifica ancora, ma con una soglia di angolo più alta (da qualche parte intorno 80-85, se dovessi indovinare.)

+0

Hai risolto questo errore? Attualmente soffre dello stesso bug. – jehna1

+0

Non ho mai provato la correzione suggerita di seguito. Sembra corretto, però. Posso dare un colpo in circa 12 ore e farti sapere se ha funzionato o no. – sigmabeta

risposta

0

Qui è la soluzione sul seguente post.

Android View Disappearing When Go Outside Of Parent

dato un ambiente che non VISTA CLIP bambino sul ViewGroup il punto di vista di animazione sono appartengono al.

android:clipChildren="false" 
android:clipToPadding="false" 
+0

Penso che il collegamento alla soluzione sia un problema diverso da quello che \ @sigmabeta descrive in questa domanda. \ @sigmabeta sta tentando di ruotare una vista solo attorno all'asse Y e si aggancia quando un lato si avvicina troppo al visualizzatore (nel piano Z). La soluzione referenziata si occupa solo dell'animazione 2D sul piano Y. Vedi http://stackoverflow.com/q/23682708/5025060 per la copertura dei problemi di clipping del piano Z. –

Problemi correlati