为什么动画有时会卡在Android上?

时间:2015-02-06 10:20:50

标签: android animation

我一直试图在Android中制作动画视图并且我已经完成了动画,但问题是有时候动画卡在中间我不知道为什么。

我正在做的是我在中间有一个视图,该视图包含水平列表视图,当点击一个项目时,当用户点击它时,视图会动画到顶部和顶部

这是动画的代码。

public class DropDownAnim extends Animation {
 private final float targetHeight;
 private final View view;
 private final boolean down;


 public DropDownAnim(View view, float targetHeight, boolean down) {
    this.view = view;
    this.targetHeight = targetHeight;
    this.down = down;
}

@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
    int newHeight;
    if (down) {
        newHeight = (int) (targetHeight * interpolatedTime);
    } else {
        newHeight = (int) (targetHeight * (1 - interpolatedTime));
    }
    view.getLayoutParams().height = newHeight;
    view.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;
  }
}

当包含水平列表视图的视图和单击该项目时,我正在执行

DropDownAnim drop = new DropDownAnim(_View, (width_And_Height[1] / 100) *
                   Utils.get_Percentage_For_animate_View_Based_On_Mobile_Resloution(),
                true); //true means go to top
        drop.setDuration(DURATION);
        _View.setAnimation(drop);
        _View.startAnimation(drop);

当视图位于顶部时

 DropDownAnim drop = new DropDownAnim(_View, (width_And_Height[1] / 100) * Utils.get_Percentage_For_animate_View_Based_On_Mobile_Resloution(),
                    false);//false means go to is orignal position
            drop.setDuration(DURATION);
            _View.setAnimation(drop);
            _View.startAnimation(drop);

这是返回屏幕的高度。

width_And_Height[1]

首先当水平滚动视图位于中心时,我点击疯狂它上升,当水平滚动视图在顶部时,我点击地图它就会到达其原始位置。

但是现在问题是有时候观点没有从顶部到达其原点位置并且卡在中间

这是图像。

当水平滚动视图位于屏幕中间时

当水平滚动视图位于屏幕顶部

时,

enter image description here

当视图未从顶部到达原始位置并卡在中间时

enter image description here

我不知道问题是什么

感谢您抽出时间回答我的问题,请帮助:)

1 个答案:

答案 0 :(得分:1)

我不确定你为什么要扩展动画。如果您尝试更改视图的位置或高度,则应使用PropertyAnimations。

如果您尝试使用简单的ObjectAnimator来扩展视图,请执行以下操作。

ObjectAnimator animation = ObjectAnimator.ofFloat(mView,"scaleX",0,2);
animation.setDuration(duration);
animation.start();