2015-02-19 1 views
5

Как я могу использовать ViewPropertyAnimator для установки ширины моего представления?Как использовать ViewPropertyAnimator для установки ширины для определенного значения

Я могу масштабировать или переводить (см. Ниже), но я не могу установить определенную ширину.

frame_1.animate().scaleX(5).scaleY(5).start(); 

но нет

frame_1.animate().width(1024).height(768).start(); 
+0

Имеет ту же проблему :( –

ответ

1

Использовать простой анимации вместо 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; 
} 

}

1

Попробуйте это, поддержка даже 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(); 

 Смежные вопросы

  • Нет связанных вопросов^_^