2

我遇到了这个问题,我有一个类似手风琴的活动,带有根据其状态展开或折叠布局的按钮,然后问题出在动画中,展开动画非常完美,但是折叠布局时折叠它通过上面父按钮的,我想相对于布局折叠它。

对不起,我的英语不好,这是代码:

public class Animations extends Animation {

/**
 * Initializes expand collapse animation, has two types, collapse (1) and expand (0).
 * @param view The view to animate
 * @param duration
 * @param type The type of animation: 0 will expand from gone and 0 size to visible and layout size defined in xml. 
 * 1 will collapse view and set to gone
 */
public AnimationSet AnimationSet;

public Animations(String type) {
    if (type == "Expand")
        AnimationSet = ExpandAnimation();
    if (type == "Collapse")
        AnimationSet =  CollapseAnimation();    
}
public AnimationSet ExpandAnimation() {

    AnimationSet _set = new AnimationSet(true);

      Animation animation = new AlphaAnimation(0.0f, 1.0f);
      animation.setDuration(250);
      _set.addAnimation(animation);

      animation = new TranslateAnimation(
          Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f,
          Animation.RELATIVE_TO_SELF, -1.0f, Animation.RELATIVE_TO_SELF, 0.0f
      );
      animation.setDuration(150);
      _set.addAnimation(animation);

      return _set;

}
public AnimationSet CollapseAnimation() {

    AnimationSet set = new AnimationSet(true);

      Animation animation = new AlphaAnimation(1.0f, 1.0f);
      animation.setDuration(250);
      set.addAnimation(animation);

      animation = new TranslateAnimation(
          Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f,
          Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, -1.0f
      );
      animation.setDuration(250);
      set.addAnimation(animation);

      return set;

}

}

4

2 回答 2

0

为什么不直接使用 ReverseInterpolator 来反转已经完美运行的扩展动画?

public class ReverseInterpolator implements Interpolator {
    public float getInterpolation(float paramFloat) {
        return Math.abs(paramFloat -1f);
    }
}

在你的_set变量上:

_set.setInterpolator(new ReverseInterpolator());

或者

public AnimationSet CollapseAnimation() {
    AnimationSet set = someObj.ExpandAnimation();
    set.setInterpolator(new ReverseInterpolator());
    return set;
}

让我也强调一些你做错的事情:

用于.equals比较字符串而不是==. 这是错误的-> if (type == "Expand")。另外,正确命名您的方法和变量,例如,

public AnimationSet AnimationSet; //poor
public AnimationSet expandAnim; //better
public AnimationSet ExpandAnimation() { //poor
public AnimationSet expand() { //better
于 2012-04-27T15:00:37.537 回答
0

只需在最顶层的布局中添加一个属性。它有一个默认动画,如“淡出”。

android:animateLayoutChanges="true"

然后将可见性 GONE/VISIBLE 设置为可折叠布局。

于 2017-04-17T11:07:37.173 回答