我在一个屏幕上有两个回收者视图,在它们之间,有一个更多按钮。
我想用动画将上层的回收者视图的高度更新为 MATCH PARENT ,所以我试过了。
binding.moreLl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ValueAnimator anim = ValueAnimator.ofInt();
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
int val = (Integer) valueAnimator.getAnimatedValue();
ViewGroup.LayoutParams layoutParams = binding.fragmentWalletRv.getLayoutParams();
layoutParams.height = val;
binding.fragmentWalletRv.setLayoutParams(layoutParams);
}
});
anim.setDuration(500);
anim.start();
}
});
但遗憾的是我无法获得预期的结果。所以请指导我如何做那件事。 提前谢谢。
答案 0 :(得分:1)
如果您只想在布局更改时获得动画,则无需使用自定义动画。 尝试通过启用
添加默认布局更改动画机器人:animateLayoutChanges = “真”
到xml中的父布局。
点击更多按钮后,只需更改LayoutParams
的{{1}}即可。
改变动画的速度
Recyclerview
答案 1 :(得分:0)
public class SlideAnimation extends Animation {
int mFromHeight;
int mToHeight;
View mView;
public SlideAnimation(View view, int fromHeight, int toHeight) {
this.mView = view;
this.mFromHeight = fromHeight;
this.mToHeight = toHeight;
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation transformation) {
int newHeight;
if (mView.getHeight() != mToHeight) {
newHeight = (int) (mFromHeight + ((mToHeight - mFromHeight) * interpolatedTime));
mView.getLayoutParams().height = newHeight;
mView.requestLayout();
}
}
@Override
public void initialize(int width, int height, int parentWidth, int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
}
@Override
public boolean willChangeBounds() {
return true;
}
}
使用上面的动画如下
rv1 = findViewById(R.id.rv1);
Animation animation = new SlideAnimation(rv1, rv1.getHeight(), 500);
animation.setInterpolator(new AccelerateInterpolator());
animation.setDuration(500);
rv1.setAnimation(animation);
rv1.startAnimation(animation);