Android动态创建对象

时间:2012-03-03 06:30:56

标签: android android-layout android-animation

我想从当前布局上存在的对象动态创建一个按钮/布局对象,并希望以不同方式处理它们。

这是我实施的代码..

全球宣布

Button btnStart, btnButton1, btnButton2, btnButton3;

和OnCreate()

btnStart = (Button) findViewById(R.id.btnStart);
btnButton1 = (Button) findViewById(R.id.Button1);
btnButton2 = (Button) findViewById(R.id.Button2);

btnButton3 = btnButton1; // Problem comes here.

我想像btnButton1一样动态创建btnButton3。点击即可 btnStart我正在为btnButton1,btnButton2和btnButton3 运行动画。

现在问题是btnButton2正在运行动画..但btnButton1不是动画 而btnButton3是动画。

这是我的完整代码..

public class TweenAnimationActivity extends Activity {
    /** Called when the activity is first created. */

    Button btnStart, btnButton1, btnButton2, btnButton3;    
    FrameLayout mainLayout;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mainLayout = (FrameLayout) findViewById(R.id.flMain);

        WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
        Display display = wm.getDefaultDisplay();
        int width = display.getWidth();
        int height = display.getHeight();

        Log.e("Dimension", "Width : " + width + "  Height : " + height);

        btnStart = (Button) findViewById(R.id.btnStart);
        btnButton1 = (Button) findViewById(R.id.Button1);
        btnButton2 = (Button) findViewById(R.id.Button2);

        btnButton3 = btnButton1;
//      btnButton3.setLayoutParams(relativeParams);

        final Animation animation = new TranslateAnimation(0, 0, 0,
                height - 220);
        animation.setDuration(5000);
        animation.setFillAfter(true);
        animation.setAnimationListener(new AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {
                // TODO Auto-generated method stub
                btnButton1.setText("Moving");
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                // TODO Auto-generated method stub
                btnButton1.setText("Moved");
            }
        });

        final Animation animation1 = new TranslateAnimation(0, 0, 0,
                -(height - 220));
        // animation1.setStartOffset(1000);
        animation1.setDuration(5000);
        animation1.setFillAfter(true);
        animation1.setAnimationListener(new AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {
                // TODO Auto-generated method stub
                btnButton2.setText("Moving");
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                // TODO Auto-generated method stub
                btnButton2.setText("Moved");
            }
        });

//      final Animation animation2 = new TranslateAnimation(0, 0, -(width - 220),
//              height - 220);
        final Animation animation2 = new TranslateAnimation(0, 0, (width - 220),
                height - 220);
        animation2.setDuration(5000);
        animation2.setFillAfter(true);
        animation2.setAnimationListener(new AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {
                // TODO Auto-generated method stub
                btnButton3.setText("MovingCopied");
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                // TODO Auto-generated method stub
                btnButton3.setText("MovedCopied");
            }
        });


        btnStart.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                btnButton1.startAnimation(animation);
                btnButton2.startAnimation(animation1);
                btnButton3.startAnimation(animation2);
            }
        });

    }
}

这是我的布局..

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/flMain"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >


    <Button
        android:id="@+id/btnStart"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Start" />


    <Button
        android:id="@+id/Button1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="top|right"
        android:text="Button1" />


    <Button
        android:id="@+id/Button2"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="bottom|right"
        android:text="Button2" />

</FrameLayout>

1 个答案:

答案 0 :(得分:0)

在你的代码中, btn Button3 = btn Button1 ,你还没有创建button3对象,只是创建了button1的引用。 试试

 btnButton3 = new Button(this)
 btnButton3.setLayoutParams(btnButton1.getLayoutParams());  
 mainLayout.addView(btnButton3);

为了更好的教程,您可以查看here