recherche

Maison  >  Questions et réponses  >  le corps du texte

android - fragment设置关于translationY属性的objectAnimator属性动画

在给fragment设置关于translationY属性的objectAnimator属性动画时,如果valueFrom的值大于等于fragment的高度时(下面代码中的第一个动画),fragment的这个动画不能在activity上显示出来,当valueFrom的值小于fragment的高度时,fragment的这个动画就能在activity上正常显示。请问为何会出现这种情况。
fragment设置动画的代码:

@Override
    public Animator onCreateAnimator(int transit, boolean enter, int nextAnim) {
        Animator anim;
        if (enter) {
            anim = ObjectAnimator.ofFloat(mRootView, "translationY", mRootView.getHeight(), 0).setDuration(2000);
        } else {
            anim = ObjectAnimator.ofFloat(mRootView, "translationY", 0, mRootView.getHeight()-1).setDuration(2000);
        }

        return anim;
    }

fragment的mRootView的layout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="horizontal"
              android:background="@drawable/bg_white"
              android:layout_width="match_parent"
              android:layout_height="wrap_content">
    <ImageView
        android:layout_marginLeft="30dp"
        android:layout_marginTop="15dp"
        android:layout_marginBottom="15dp"
        android:layout_marginRight="40dp"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:src="@drawable/icon_navigation"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="@string/app_name"
        android:id="@+id/location_txv"
        android:gravity="center_vertical"
        android:textSize="16sp"/>
</LinearLayout>
PHP中文网PHP中文网2802 Il y a quelques jours826

répondre à tous(2)je répondrai

  • 大家讲道理

    大家讲道理2017-04-17 17:26:39

    Remplacez translationY par y et voyez,

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-17 17:26:39

    Une solution a été trouvée jusqu'à présent. Ce problème semble être lié à l'aménagement de l'activité.
    mise en page de l'activité :

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    xmlns:tools="http://schemas.android.com/tools"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:id="@+id/root_view"
                    android:gravity="top|left"
                    android:orientation="vertical">
    
        <LinearLayout
            android:id="@+id/title_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <Button
                android:id="@+id/title_btn"
                android:layout_width="fill_parent"
                android:layout_height="48dp"/>
        </LinearLayout>
    
        <ImageView
            android:id="@+id/location_view"
            android:layout_width="55dp"
            android:layout_height="55dp"
            android:src="@drawable/icon_location"
            android:layout_alignParentBottom="true"
            android:layout_alignParentEnd="true"
            android:layout_marginEnd="25dp"
            android:layout_marginBottom="85dp"/>
        
        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/fragment_bottom"
            android:layout_alignParentBottom="true">
        </FrameLayout>
    </RelativeLayout>

    Dans la mise en page de l'activité, j'ai défini la hauteur des boutons et de imageView. L'espace entre imageView et le bas de l'écran, qui est ayout_marginBottom="85dp", peut être considéré comme vide (une telle signification). est difficile à exprimer). Ma solution actuelle est d'ajouter une vue haute 1dp en bas de cet espace :

    <ImageView
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_alignParentBottom="true"/>

    Après avoir ajouté cela, même si la valeur valueFrom est supérieure ou égale à la hauteur, l'animation peut être affichée normalement, mais je ne sais pas pourquoi cela se produit, j'ai l'impression que si je n'ajoute pas cette vue, le frameLayout qui stocke le fragment sera comme mentionné ci-dessus. Dans cet espace "vide", il ne peut pas être affiché. Je ne sais pas comment ce processus est dessiné dans le code source, et j'espère obtenir une réponse.

    répondre
    0
  • Annulerrépondre