在 Imageview 上缩放动画

Scale animation on Imageview

如何为我的 ImageView 制作动画,就像下面 gif 中 FloatingActionButton 的动画(显示和隐藏)一样。

您可以使用比例 up/down 动画来实现这一点。

scale_up.xml

    <set xmlns:android="http://schemas.android.com/apk/res/android">
       <scale
         android:duration="100"
         android:fromXScale="0"
         android:fromYScale="0"
         android:pivotX="50%"
         android:pivotY="50%"
         android:toXScale="1.0"
         android:toYScale="1.0" />
    </set>

scale_down.xml

   <set xmlns:android="http://schemas.android.com/apk/res/android">
       <scale
         android:duration="100"
         android:fromXScale="1.0"
         android:fromYScale="1.0"
         android:pivotX="50%"
         android:pivotY="50%"
         android:toXScale="0"
         android:toYScale="0" />
 </set>

要将动画应用到您的 imageView,您可以这样做:

    /**
    * For scale up animation
    */
    Animation animation = AnimationUtils.loadAnimation(mContext, R.anim.scale_up);
        child.startAnimation(animation);
        child.setVisibility(View.VISIBLE);

缩小规模

    /**
    * For scale down animation
    */
    Animation animation = AnimationUtils.loadAnimation(mContext, R.anim.scale_down);
        child.startAnimation(animation);
        child.setVisibility(View.INVISIBLE);

这取决于你希望 imageView 放大和缩小的位置。

使用 CoordinatorLayout 作为您的父布局。 为 FloatingActionButton

创建滚动行为

将此 class 用于滚动行为

public class FabBehaviour extends FloatingActionButton.Behavior {

private static final String TAG = FabBehaviour.class.getSimpleName();

int preDX = 0;
int preFinal = 0;

@Override
public void onStopNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View target) {
    Log.d(TAG, "Stop");
    child.show();
    super.onStopNestedScroll(coordinatorLayout, child, target);
}

public FabBehaviour(Context context, AttributeSet attrs) {
    super();
}

@Override
public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout,
                                   FloatingActionButton child, View directTargetChild, View target, int nestedScrollAxes) {

    if (ViewCompat.SCROLL_AXIS_NONE == nestedScrollAxes) {
        child.show();
    }
    return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL ||
            super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target,
                    nestedScrollAxes);
}




@Override
public void onNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child,
                           View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) {
    super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed,
            dyUnconsumed);
    preFinal = dyConsumed;
    if (dyConsumed > 0 && child.getVisibility() == View.VISIBLE && preDX < dyConsumed) {
        child.hide();
    } else if (dyConsumed < -5 && child.getVisibility() != View.VISIBLE) {
        child.show();
    }
    preDX = dyConsumed;
} }

现在在您的布局 'FlotingActionButton' 中添加此标签

app:layout_behavior="<package name>.FabBehaviour"