动画集视图宽度从X到0

时间:2018-01-10 10:57:47

标签: android animation

我正在尝试将CardView(在RecycleView中)从实际宽度变为0.我是Android和Android动画中的新手。你能说我做错了什么吗?

这是我的代码:

final View v = cardViewHolder.cv;
int actualWidth = v.getMeasuredWidth();
ValueAnimator anim = ValueAnimator.ofInt(actualWidth, 0);
anim.setRepeatMode(ValueAnimator.REVERSE);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
     public void onAnimationUpdate(ValueAnimator valueAnimator) {
          int val = (Integer) valueAnimator.getAnimatedValue();
          ViewGroup.LayoutParams layoutParams = v.getLayoutParams();
          layoutParams.width = val;
          v.setLayoutParams(layoutParams);
    }
});
anim.setDuration(R.integer.card_flip_time_full);
anim.start();

使用断点我发现val总是728(宽度)并且永远不会改变。什么是我的失败?

1 个答案:

答案 0 :(得分:0)

我解决了它:

final View v = cardViewHolder.cv;
int actualWidth = v.getMeasuredWidth();
ValueAnimator anim = ValueAnimator.ofInt(actualWidth, 0);
anim.setRepeatMode(ValueAnimator.REVERSE);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
     public void onAnimationUpdate(ValueAnimator valueAnimator) {
          // This needs to be declared as Integer instead of int
          v.requestLayout(); // @mhenryk advice
          Integer val = (Integer) valueAnimator.getAnimatedValue();  
          int value = val.intValue();  // Then get the int value
          ViewGroup.LayoutParams layoutParams = v.getLayoutParams();
          layoutParams.width = value;
          v.setLayoutParams(layoutParams);
    }
});
anim.setDuration(R.integer.card_flip_time_full);
anim.start();