Android создает объект динамически - PullRequest
1 голос
/ 03 марта 2012

Я хочу создать один объект кнопки / макета динамически из объекта, который существует в текущем макете и хочет обрабатывать оба элемента по-разному.

Вот мой код, который я реализовал ..

объявлено глобально

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.

Я хочу создать btnButton3 динамически так же, как btnButton1. При нажатии на 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 голосов
/ 03 марта 2012

В вашем коде, btnButton3 = btnButton1 , вы не создали объект button3, просто создали ссылку на button1.попробуйте

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

и для лучшего урока вы можете посмотреть здесь .

...