我有一个顶级的LinearLayout,其中有许多子项由一个按钮组成,后跟一个不可见的LinearLayout。当我按下按钮时,我希望LinearLayout的内容能够动画并平滑地按下所有内容。相反,正在发生的是一个大的白色空间立即被雕刻出来,然后LinearLayout动画进入空白空间,而不是优雅地向下推动一切。
我的onCreate方法创建了大量的LinearList以及每个子LinearList的所有子节点。如果您运行此代码,您将看到20个按钮标记为“按钮X”,其中X为0-19。当你点击下面的按钮缩进按钮时(如子菜单),但是“按钮X + 1”形式的下一个按钮会立即被画下来,而不会被动画下推。
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout topll = (LinearLayout)findViewById(R.id.topll);
for(int i=0;i<20;i++)
{
Button b = new Button(this);
b.setText("Button"+String.format("%s", i));
b.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, 1f));
b.setOnClickListener(this);
topll.addView(b);
LinearLayout l = new LinearLayout(this);
l.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, 1f));
l.setVisibility(View.GONE);
l.setOrientation(LinearLayout.VERTICAL);
for(int k=0; k<10; k++)
{
Button b2 = new Button(this);
b2.setText("New Button"+String.format("%s", k));
LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, 1f);
p.setMargins(80, 0, 0, 0);
b2.setLayoutParams(p);
//b2.setOnClickListener(this);
l.addView(b2);
}
topll.addView(l);
}
}
这是我按下按钮时调用的方法......
@Override
public void onClick(View arg0)
{
LinearLayout topll = (LinearLayout)findViewById(R.id.topll);
for(int i=0;i<topll.getChildCount();i++)
{
if(topll.getChildAt(i) == arg0)
{
LinearLayout ll = (LinearLayout)topll.getChildAt(i+1);
if(ll.getVisibility() == View.GONE)
{
Animation animation = AnimationUtils.loadAnimation(this, R.anim.expanddown);
ll.setAnimation(animation);
animation.start();
ll.setVisibility(View.VISIBLE);
}
else
{
Animation animation = AnimationUtils.loadAnimation(this, R.anim.expandup);
ll.setAnimation(animation);
animation.start();
ll.setVisibility(View.GONE);
}
}
}
}
最后我的动画xml文件
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale android:duration="1000"
android:startOffset="0"
android:fillAfter="false"
android:fromXScale="1.0"
android:fromYScale="0.0"
android:toYScale="1.0"
android:toXScale="1.0"
android:pivotY="0%"/>
</set>
答案 0 :(得分:0)
首先使用
ll.startAnimation(animation);
而不是:
ll.setAnimation(animation);
animation.start();
然后使用动画监听器和
animation.setAnimationListener(new AnimationListener() {
public void onAnimationStart(Animation anim)
{
};
public void onAnimationRepeat(Animation anim)
{
};
public void onAnimationEnd(Animation anim)
{
ll.setVisibility(View.VISIBLE);
// or what ever
};
});