2017-01-05 17 views
1

Ich habe ein ImageView in einem CollapsingToolbarLayout und das ImageView nimmt den ganzen Bildschirm mit einigen Informationen am Ende auf. Wenn ein Benutzer auf ImageView klickt, möchte ich, dass die Höhe des CollapsingToolBarLayout 150dp wird. Wie stelle ich die Höhe des CollapsingToolBarLayout so ein, dass eine weiche Animation auf die Höhe 150dp gesetzt wird. Ich möchte die Höhe langsam und langsam an 150dp nicht schnell erreichen, um eine nette Animation zu haben. Wie kann ich das erreichen?Wie man Layouthöhe glatt einstellt

activity_scrolling.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true" 
tools:context="com.myapplication.foodapp.ScrollingActivity" 
android:id="@+id/coordinator_layout" 
android:animateLayoutChanges="true"> 

<android.support.design.widget.AppBarLayout 
    android:id="@+id/app_bar" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    android:theme="@style/AppTheme.PopupOverlay" 
    android:animateLayoutChanges="true"> 

    <android.support.design.widget.CollapsingToolbarLayout 
     android:id="@+id/collapsing_tool_bar_layout" 
     android:layout_width="match_parent" 
     android:layout_height="fill_parent" 
     android:fitsSystemWindows="true" 
     app:layout_scrollFlags="scroll|exitUntilCollapsed" 
     android:animateLayoutChanges="true"> 

     <ImageView 
      android:id="@+id/chipotle_image" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_alignParentTop="true" 
      android:layout_gravity="fill_vertical" 
      android:src="@mipmap/food1" 
      android:adjustViewBounds="true" 
      android:scaleType="fitXY"/> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Chipotle Chicken Fajitas" 
      android:textSize="27sp" 
      android:layout_gravity="bottom" 
      android:layout_marginBottom="40dp" 
      android:layout_marginLeft="5dp" 
      android:textColor="#fff" 
      android:id="@+id/first_food_title"/> 

     <me.grantland.widget.AutofitTextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="16 ingredients | 284 Calories | 1 hour" 
      android:singleLine="true" 
      android:textAlignment="center" 
      android:textColor="#fff" 
      android:layout_gravity="bottom" 
      android:textSize="20sp" 
      android:id="@+id/spec_text"/> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="150dp" 
      app:layout_collapseMode="pin" 
      android:animateLayoutChanges="true"> 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 

       <ImageView 
        android:layout_width="25dp" 
        android:layout_height="25dp" 
        android:src="@mipmap/arrow" 
        android:id="@id/back_Arrow" 
        android:layout_marginTop="5dp" 
        /> 




      </LinearLayout> 


     </android.support.v7.widget.Toolbar> 




    </android.support.design.widget.CollapsingToolbarLayout> 

</android.support.design.widget.AppBarLayout> 

<!-- ** CONTENT SCROLLING LAYOUT ** --> 
<include layout="@layout/content_scrolling"> 

</include> 
</android.support.design.widget.CoordinatorLayout> 

Antwort

0

Sie können dies mit ValueAnimator erreichen.

ValueAnimator anim = ValueAnimator.ofInt(viewToIncreaseHeight.getMeasuredHeight(), finalValue); 
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
    @Override 
    public void onAnimationUpdate(ValueAnimator valueAnimator) { 
     int val = (Integer) valueAnimator.getAnimatedValue(); 
     ViewGroup.LayoutParams layoutParams = viewGroup.getLayoutParams(); 
     layoutParams.height = val; 
     viewGroup.setLayoutParams(layoutParams); 
    } 
}); 
anim.start();