How can I use ViewPropertyAnimator to set my view width?
I can scale or translate (see below) but I can't set to a specific width.
frame_1.animate().scaleX(5).scaleY(5).start();
but there is no
frame_1.animate().width(1024).height(768).start();
Try this, support even from Android 2.3:
ValueAnimatorCompat exitAnimator = AnimatorCompatHelper.emptyValueAnimator();
exitAnimator.setDuration(TransitCompat.ANIM_DURATION * 4);
exitAnimator.addUpdateListener(new AnimatorUpdateListenerCompat() {
private float oldWidth = view.getWidth();
private float endWidth = 0;
private float oldHeight = view.getHeight();
private float endHeight = 0;
private Interpolator interpolator2 = new BakedBezierInterpolator();//Any other will be also O.K.
@Override
public void onAnimationUpdate(ValueAnimatorCompat animation) {
float fraction = interpolator2.getInterpolation(animation.getAnimatedFraction());
float width = oldWidth + (fraction * (endWidth - oldWidth));
mTarget.get().getLayoutParams().width = (int) width;
float height = oldHeight + (fraction * (endHeight - oldHeight));
view.getLayoutParams().height = (int) height;
view.requestLayout();
}
});
exitAnimator.start();
Use simple animation instead of ViewPropertyAnimator
public class ResizeWidthAnimation extends Animation
{
private int mWidth;
private int mStartWidth;
private View mView;
public ResizeWidthAnimation(View view, int width)
{
mView = view;
mWidth = width;
mStartWidth = view.getWidth();
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t)
{
int newWidth = mStartWidth + (int) ((mWidth - mStartWidth) * interpolatedTime);
mView.getLayoutParams().width = newWidth;
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;
}
}