在 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"
如何为我的 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"