0

ボタンとそれに続く非表示の LinearLayout で構成された多くの子を持つトップレベルの LinearLayout があります。ボタンを押すと、 LinearLayout のコンテンツがアニメーション化され、すべてがスムーズに押し下げられます。代わりに、大きな空白が即座に切り出され、すべてが優雅に押し下げられるのではなく、LinearLayout が空のスペースにアニメーション化されます。

私の onCreate メソッドは、大規模な LinearList と、各子 LinearList のすべての子を作成します。このコードを実行すると、「Button X」というラベルの付いた 20 個のボタンが表示されます。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>
4

1 に答える 1

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
                    };
                });         
于 2013-03-30T00:41:22.003 に答える