1

嗨,我正在借用Seth在此处找到的方法来为我的 viewGroups 设置动画。它工作得很好,但方向错误——这是我第一次使用/扩展动画类,我不知道如何减小视图的大小——这会扩展它。

下面是课程以及我如何使用它。任何帮助将不胜感激。

public class ContainerAnim extends Animation {
    int targetWidth;
    View view;
    boolean opened;

    public ContainerAnim(View v, int targetWidth, boolean opened) {
        this.view = v;
        this.targetWidth = targetWidth;
        this.opened = opened;
    }

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

用法:

... case R.id.menu_shrink:
            FragmentTransaction ft = getFragmentManager().beginTransaction();
            FrameLayout frame = (FrameLayout) findViewById(R.id.listFragment_container);

            ContainerAnim set = new ContainerAnim(frame, 100, true);
            set.setDuration(200);
            LayoutAnimationController c = new LayoutAnimationController(set,
                    0.25f);
            frame.setLayoutAnimation(c);
            frame.startLayoutAnimation();

            ft.commit();
...
4

1 回答 1

0

我认为您混淆了第三个参数(布尔值)的用法。你称它为“打开”,并通过它,因为你想缩小它。但是,这与我原始代码中的用法相反!在我的代码中,如果视图关闭但我希望它增长,则布尔值是真的。

“并且 d = 指定方向的布尔值(真 = 展开,假 = 折叠)。”

如果将动画类中的条件交换为 if(!opened){},它应该可以工作。或者将其传递给 false 而不是 true。或将其传递给 true,但将变量更改为“关闭”而不是“打开”。

-赛斯

于 2012-02-15T00:56:31.857 回答