我想从当前布局上存在的对象动态创建一个按钮/布局对象,并希望以不同方式处理它们。
这是我实施的代码..
全球宣布
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>
答案 0 :(得分:0)
在你的代码中, btn Button3 = btn Button1 ,你还没有创建button3对象,只是创建了button1的引用。 试试
btnButton3 = new Button(this)
btnButton3.setLayoutParams(btnButton1.getLayoutParams());
mainLayout.addView(btnButton3);
为了更好的教程,您可以查看here。