2015-02-19 14 views

Odpowiedz

1

używać prostych animacji zamiast 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

Spróbuj tego, wsparcie nawet z Androidem 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(); 
Powiązane problemy