ObjectAnimatorプロパティアニメーションスケール、ViewAnimatorの使い方
需要
デフォルトのViewは徐々に大きくなり、viewが占める空間は徐々に大きくなります
ObjectAnimationで実現できると思っていたのですが、ちょっと無邪気
まずviewを可視に設定し、プロパティアニメーションxyを介して徐々に大きくなる
しかし、ビューが表示されていることに気づいたときに空間が一気に大きくなり(先に空間を占有し)、徐々にビューが大きくなります
-----------------------------------------
改善
考え方は、ViewAnimatorで徐々に高さの値を変更し、動的に高さの値を設定することです
デフォルトのViewは徐々に大きくなり、viewが占める空間は徐々に大きくなります
ObjectAnimationで実現できると思っていたのですが、ちょっと無邪気
mSender.setVisibility(View.VISIBLE);//
AnimatorSet animatorSet = new AnimatorSet();//
ObjectAnimator scaleX = ObjectAnimator.ofFloat(mSender, "scaleX", 0, 1f);
ObjectAnimator scaleY = ObjectAnimator.ofFloat(mSender, "scaleY", 0, 1f);
animatorSet.setDuration(2000);
animatorSet.setInterpolator(new DecelerateInterpolator());
animatorSet.play(scaleX).with(scaleY);//
animatorSet.start();
まずviewを可視に設定し、プロパティアニメーションxyを介して徐々に大きくなる
しかし、ビューが表示されていることに気づいたときに空間が一気に大きくなり(先に空間を占有し)、徐々にビューが大きくなります
-----------------------------------------
改善
mAddSender.setVisibility(View.VISIBLE);
int height = ((LinearLayout) findViewById(R.id.self_receiver_layout)).getHeight();
ValueAnimator scaleY = ValueAnimator.ofInt(0, height); //// , view GONE
scaleY.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int animatorValue = Integer.valueOf(animation.getAnimatedValue() + "");
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mAddSender.getLayoutParams();
params.height = animatorValue;
mAddSender.setLayoutParams(params);
}
});
scaleY.setTarget(mAddSender);
scaleY.setDuration(250);
scaleY.start();
考え方は、ViewAnimatorで徐々に高さの値を変更し、動的に高さの値を設定することです