您好我借用Seth's方法找到here来为我的viewGroups设置动画。它工作得很好,但方向错误 - 这是我第一次使用/扩展Animation类,我无法想象如何减小视图的大小 - 这扩展了它。
下面是课程以及我如何使用它。任何帮助将不胜感激。
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();
...
答案 0 :(得分:0)
我认为你混淆了第三个参数(布尔值)的用法。你称之为“打开”,并将其传递为真,因为你想缩小它。但是,这与我原始代码中的用法相反!在我的代码中,如果视图已关闭,则布尔值为true,但我希望增长。
“和d =一个指定方向的布尔值(true = expanded,false = collapsing)。”
如果将动画类中的条件交换为if(!opened){},它应该可以工作。或者传递它而不是真实。或者将其传递为true,但将变量更改为“已关闭”而不是“已打开”。
-Seth