Animazione della properties; weightSum utilizzando ObjectAnimator

Intro:

Ho un LinearLayout, che contiene due sub LinearLayouts, come così:

  • Android: imposta lo stile di visualizzazione in modo programmato
  • Ricerca automatica come tipi di utenti
  • Determinare la posizione relativa di 2 dispositivi mobili usando l'ultrasuono
  • Come faccio a fare clic sul primo elemento in un filatore usando Robotium?
  • Android: Domanda su bitmap, uso della memory e scaling
  • Refrence object non impostato su un'istanza di un object Quando creo una nuova applicazione Android (Visual Studio)
  • <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dual_pane" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" android:weightSum="1.0"> <!-- Screen 1 --> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:background="#ff0000" android:layout_weight="1"> </LinearLayout> <!-- Screen 2 --> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:background="#ff6600" android:layout_weight="1"> </LinearLayout> </LinearLayout> 

    Inizialmente, voglio "Schermo 1" per prendere tutta la width dello schermo disponibile. Pertanto, il mio gruppo R.id.dual ha l'attributo weightSum a 1.0. Questo funziona bene! se weightSum = 1.0, la schermata 1 occupa lo schermo integer!

    Dopo aver caricato alcune risorse, modifico il mio R.id.dual_pane weighSum su 2.0, il che comport che sia la schermata 1 che la schermata 2 assumono il 50% della width dello schermo. Questo funziona perfettamente anche. Quando pesoSum = 2.0, entrambe le schermate prendono il 50% della width.

    Problema:

    Vorrei animare la properties; weightSum, in modo che il mio Screen2 scivoli dentro. Sto puntando a HoneyComb, quindi la versione minSDK è di 11 e ho immaginato, utilizzando il nuovo framework ObjectAnimator, potrei facilmente animare questa properties; per get un bel effetto liscio . Ho verificato che LinearLayout effettivamente ha methods getWeightSum () e setWeightSum () (che è necessario per utilizzare ObjectAnimator, credo).

    Sforzo personale:

    Ecco il mio codice per mostrare e hide Screen2 utilizzando ObjectAnimator:

     private void showScreen2() { //Not-animated will work... //mDualPane.setWeightSum(2.0f); // Now try to animate the weightSum float ws = mDualPane.getWeightSum(); ObjectAnimator anim = ObjectAnimator.ofFloat(mDualPane, "weightSum", ws, 2.0f); anim.setDuration(5000); anim.start(); } private void hideScreen2() { //Not-animated will work... //mDualPane.setWeightSum(1.0f); // Now try to animate the weightSum float ws = mDualPane.getWeightSum(); ObjectAnimator anim = ObjectAnimator.ofFloat(mDualPane, "weightSum", ws, 1.0f); anim.setDuration(5000); anim.start(); } 

    Qui, il mio mDualPane è la mia radice LinearLayout …

    Domanda:

    Quando chiamo queste funzioni, non succede niente. Lo schermo rimane esattamente come prima. Devo call requestLayout () sul mio mDualPane da qualche parte? Mi manca una certa conoscenza del ObjectAnimator? Oppure è imansible animare la properties; weightSum?

    ANCHE:

    1) Non voglio confondere con larghezze codificate e animare quelle. Per ora voglio 50-50 per entrambi gli schermi, ma posso cambiarlo più tardi. Comunque, devo essere in grado di impostare un rapporto specifico tra le due larghezze.

    2) Ho guardato LayoutTransition combinato con la visibilità di commutazione, ma senza alcun risultato

  • org.json.JSONObject non può essere convertito in JSONArray
  • Android - Posso impostare la prima priorità GPS per get la posizione corrente nella mappa google?
  • Non funziona TelephonyManager.getLine1Number ()?
  • LibGDX. disegnare il text multilinea
  • Android java.lang.VerifyError?
  • Android System WebView blocca applicazioni Android! "Le lapidi sono disabilitate sulle creazioni utente di JB MR2 +"
  • One Solution collect form web for “Animazione della properties; weightSum utilizzando ObjectAnimator”

    Ero giusto nel senso che ho bisogno di aggiornare il layout stesso:

     float ws = mDualPane.getWeightSum(); ObjectAnimator anim = ObjectAnimator.ofFloat(mDualPane, "weightSum", ws, 2.0f); anim.setDuration(5000); anim.addUpdateListener(this); anim.start(); 

    Ora, ho aggiunto un UpdateListener all'objectAnimatore, che viene implementato dalla mia attività e aggiorna il layout:

     @Override public void onAnimationUpdate(ValueAnimator animation) { mDualPane.requestLayout(); } 

    Mi sembra strano, che ObjectAnimator non lo chiama in sé, ma comunque, questo è come farlo funzionare.

    La soluzione è particolarmente piacevole, a mio parere, dal momento che puoi ben animare i layout che scivolano, indipendentemente dalla schermata …

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.