我是新來的android編程,我有一個簡單的問題。我有一個隨機數,nr和我在相同的位置生成這個數量的ImageViews。現在,我想對這些圖像中的每一個應用動畫,但不是在同一時間。延遲for循環安卓
比方說,我希望第一個圖像開始在第0秒移動,然後在第2秒開始移動,依此類推。
我有一個數組中的圖像imb_items []。
for(int j=0; j<nr;j++){
imb_items[j].startAnimation(translateAnim);
????? how can I put here the delay?
}
我想了很長時間來做到這一點,但我只是不能用處理程序或線程來做...我想我不明白這個概念。 如果有人能幫助我理解並給我一個示例代碼,可以在我的具體情況下工作,我將非常感激。
謝謝!
public class MyActivity extends ActionBarActivity implements OnClickListener {
private TextView mCalculatorDisplay;
private Boolean userIsInTheMiddleOfTypingANumber = false;
private CalculatorBrain mCalculatorBrain;
private static final String DIGITS = ".";
DecimalFormat df = new DecimalFormat("@###########");
Animation anim_translate;
public double valoare, produs, scor = 0;
int printfirst, printsecond;
Handler mHandler = new Handler();
int[] idMultiple = new int[]{6, 5, 3, 4, 2};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
//Img.setVisibility(View.VISIBLE);
//android.view.Display display = ((android.view.WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
Animation translateAnim = AnimationUtils.loadAnimation(MyActivity.this, R.anim.translate);
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int width = displaymetrics.widthPixels;
int dpHeight = (int)(displaymetrics.heightPixels/displaymetrics.density);
int dpWidth = (int)(displaymetrics.widthPixels/displaymetrics.density);
ImageView imb1=(ImageView)findViewById(R.id.ImageView1);
Toast.makeText(getApplicationContext(), "Spiridusii lui Mos Craciun pregatesc jucariile pentru copii.",
Toast.LENGTH_LONG).show();
Toast.makeText(getApplicationContext(), "Ei au observat ca unele jucarii sunt incomplete. Ajuta-i sa comande piesele lipsa!",
Toast.LENGTH_LONG).show();
Toast.makeText(getApplicationContext(), height+"inaltime"+width,
Toast.LENGTH_LONG).show();
Toast.makeText(getApplicationContext(), dpHeight+"inaltime"+dpWidth,
Toast.LENGTH_LONG).show();
RelativeLayout Layout=(RelativeLayout)findViewById(R.id.rel_banda);
ImageView banda=(ImageView) findViewById(R.id.banda);
mCalculatorBrain = new CalculatorBrain();
mCalculatorDisplay = (TextView) findViewById(R.id.Raspuns_user);
df.setMinimumFractionDigits(0);
df.setMinimumIntegerDigits(1);
df.setMaximumIntegerDigits(2);
findViewById(R.id.b0).setOnClickListener(this);
findViewById(R.id.b1).setOnClickListener(this);
findViewById(R.id.b2).setOnClickListener(this);
findViewById(R.id.b3).setOnClickListener(this);
findViewById(R.id.b4).setOnClickListener(this);
findViewById(R.id.b5).setOnClickListener(this);
findViewById(R.id.b6).setOnClickListener(this);
findViewById(R.id.b7).setOnClickListener(this);
findViewById(R.id.b8).setOnClickListener(this);
findViewById(R.id.b9).setOnClickListener(this);
findViewById(R.id.buttonClear).setOnClickListener(this);
Runnable runnable = new Runnable() {
@Override
public void run() {
{
valoare = Double.parseDouble(String.valueOf(mCalculatorDisplay.getText()));
genereaza_imagini();
check_answer();
}
}
};
mHandler.post(runnable);
//genereaza_imagini dinamic de la una la 9 imagini de un anumit tip
}
//max poate fi 5 sau 9
public void genereaza_imagini() {
final TextView et1, et2;
et1 = (TextView) findViewById(R.id.printfirst);
et2 = (TextView) findViewById(R.id.printsecond);
int nr1 = random(5);
printsecond = random(9);
printfirst = idMultiple[nr1 - 1];
produs = printsecond * printfirst;
et1.setTextSize(13);
et2.setTextSize(13);
et1.setText("nr piese lipsa:" + printfirst);
et2.setText("nr jucarii:" + printsecond);
et1.setVisibility(View.VISIBLE);
et2.setVisibility(View.VISIBLE);
ImageView imb1 = (ImageView) findViewById(R.id.ImageView1);
ImageView imb2 = (ImageView) findViewById(R.id.ImageView2);
ImageView imb3 = (ImageView) findViewById(R.id.ImageView3);
ImageView imb4 = (ImageView) findViewById(R.id.ImageView4);
ImageView imb5 = (ImageView) findViewById(R.id.ImageView5);
ImageView imb6 = (ImageView) findViewById(R.id.ImageView6);
ImageView imb7 = (ImageView) findViewById(R.id.ImageView7);
ImageView imb8 = (ImageView) findViewById(R.id.ImageView8);
ImageView imb9 = (ImageView) findViewById(R.id.ImageView9);
final ImageView[] imb_items = new ImageView[]{imb1, imb2, imb3, imb4, imb5, imb6, imb7, imb8, imb9};
for (int j = 0; j < 9; j++) {
RelativeLayout.LayoutParams lp;
lp = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int width = displaymetrics.widthPixels;
int dpHeight = (int) (displaymetrics.heightPixels/displaymetrics.density);
int dpWidth = (int) (displaymetrics.widthPixels/displaymetrics.density);
lp.leftMargin = dpWidth/2 - dpWidth/10;
lp.topMargin = dpHeight/4;
imb_items[j].setLayoutParams(lp);
imb_items[j].getLayoutParams().height = 30;
imb_items[j].getLayoutParams().width = 30;
imb_items[j].setImageResource(0);
imb_items[j].setVisibility(View.GONE);
}
final int i = printsecond; // cate imagini din cele 9
if (nr1 == 1) {
Toast.makeText(getApplicationContext(), "Omizilor le lipsesc 6 picioare.",
Toast.LENGTH_SHORT).show();
for (int j = 0; j < i; j++) {
imb_items[j].setImageResource(R.drawable.obj1);
imb_items[j].setVisibility(View.VISIBLE);
}
}
if (nr1 == 2) {
Toast.makeText(getApplicationContext(), "Florilor le lipsesc 5 petale. ",
Toast.LENGTH_SHORT).show();
for (int j = 0; j < i; j++) {
imb_items[j].setImageResource(R.drawable.obj2);
imb_items[j].setVisibility(View.VISIBLE);
}
}
if (nr1 == 3) {
Toast.makeText(getApplicationContext(), "Papusilor le lipsesc 3 nasturi. ",
Toast.LENGTH_SHORT).show();
for (int j = 0; j < i; j++) {
imb_items[j].setImageResource(R.drawable.obj3);
imb_items[j].setVisibility(View.VISIBLE);
}
}
if (nr1 == 4) {
Toast.makeText(getApplicationContext(), "Masinilor le lipsesc 4 roti. ",
Toast.LENGTH_SHORT).show();
for (int j = 0; j < i; j++) {
imb_items[j].setImageResource(R.drawable.obj4);
imb_items[j].setVisibility(View.VISIBLE);
}
}
if (nr1 == 5) {
Toast.makeText(getApplicationContext(), "Robotilor le lipsesc 2 antene. ",
Toast.LENGTH_SHORT).show();
for (int j = 0; j < i; j++) {
imb_items[j].setImageResource(R.drawable.obj5);
imb_items[j].setVisibility(View.VISIBLE);
}
}
final Animation translateAnim = AnimationUtils.loadAnimation(MyActivity.this, R.anim.translate);
Thread thread = new Thread() {
public void run() {
while (true) {
try {
for(int j=0; j<i;j++){
imb_items[j].startAnimation(translateAnim); ???????????????????????????????????????????
Thread.sleep(2000);
}
} catch (InterruptedException e) {
Log.v("tag", "local Thread error");
}
}
}
};
thread.start();
}
public int random(int max) {
Random r = new Random();
int random = r.nextInt(max) + 1;
return random;
}
public void check_answer() {
Button b = (Button) findViewById(R.id.button);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
valoare = Double.parseDouble(String.valueOf(mCalculatorDisplay.getText()));
verifica();
}
});
}
//functie care afiseaza la onCreate, cand apas pe buton 2: nr1, nr2, raspuns corect nr1*nr2
public void verifica() {
final TextView et1, et2;
et1 = (TextView) findViewById(R.id.printfirst);
et2 = (TextView) findViewById(R.id.printsecond);
TextView Scor = (TextView) findViewById(R.id.Scorul);
if (produs == valoare) {
Toast.makeText(getApplicationContext(), "Raspunsul este corect! :)",
Toast.LENGTH_SHORT).show();
Log.v("Produsul este corect=", String.valueOf(produs));
scor = scor + 50;
Scor.setText("Scor:" + scor);
} else {
Toast.makeText(getApplicationContext(), "Raspunsul este gresit! :(",
Toast.LENGTH_SHORT).show();
Log.v("Produsul nu este corect=", String.valueOf(produs));
scor = scor - 50;
Scor.setText("Scor:" + scor);
}
// ca sa actualizeze automat text view-ul raspuns user la 0.0
if (userIsInTheMiddleOfTypingANumber) {
mCalculatorBrain.setOperand(Double.parseDouble(mCalculatorDisplay.getText().toString()));
userIsInTheMiddleOfTypingANumber = false;
}
mCalculatorBrain.performOperation("C");
mCalculatorDisplay.setText(df.format(mCalculatorBrain.getResult()));
genereaza_imagini();
}
// mCalculatorDisplay.setText(df.format(mCalculatorBrain.getResult()));
// }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.my, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onClick(View v) {
String buttonPressed = ((Button) v).getText().toString();
if (DIGITS.contains(buttonPressed)) {
// digit was pressed
if (userIsInTheMiddleOfTypingANumber) {
if (buttonPressed.equals(".") && mCalculatorDisplay.getText().toString().contains(".")) {
// ERROR PREVENTION
// Eliminate entering multiple decimals
} else {
mCalculatorDisplay.append(buttonPressed);
}
} else {
if (buttonPressed.equals(".")) {
// ERROR PREVENTION
// This will avoid error if only the decimal is hit before an operator, by placing a leading zero
// before the decimal
mCalculatorDisplay.setText(0 + buttonPressed);
} else {
mCalculatorDisplay.setText(buttonPressed);
}
userIsInTheMiddleOfTypingANumber = true;
}
} else {
// operation was pressed
if (userIsInTheMiddleOfTypingANumber) {
mCalculatorBrain.setOperand(Double.parseDouble(mCalculatorDisplay.getText().toString()));
userIsInTheMiddleOfTypingANumber = false;
}
mCalculatorBrain.performOperation(buttonPressed);
mCalculatorDisplay.setText(df.format(mCalculatorBrain.getResult()));
}
}
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// Save variables on screen orientation change
outState.putDouble("OPERAND", mCalculatorBrain.getResult());
outState.putDouble("MEMORY", mCalculatorBrain.getMemory());
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// Restore variables on screen orientation change
mCalculatorBrain.setOperand(savedInstanceState.getDouble("OPERAND"));
mCalculatorBrain.setMemory(savedInstanceState.getDouble("MEMORY"));
mCalculatorDisplay.setText(df.format(mCalculatorBrain.getResult()));
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/banda_bk"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:visibility="visible"
tools:context=".MyActivity">
<RelativeLayout android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_centerInParent="true"
android:id="@+id/rel_banda">
<ImageView
android:id="@+id/banda"
android:visibility="visible"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/banda" />
<ImageView
android:id="@+id/ImageView1"
android:layout_marginRight="92dp"
android:layout_marginBottom="52dp"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_toLeftOf="@+id/linearLayout4"
android:visibility="gone"/>
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:id="@+id/ImageView2"
android:layout_alignLeft="@+id/ImageView1"
android:layout_alignStart="@+id/ImageView1"
android:visibility="gone"/>
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:id="@+id/ImageView3"
android:layout_marginRight="41dp"
android:layout_toLeftOf="@+id/ImageView2"
android:visibility="gone"/>
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:id="@+id/ImageView4"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="16dp"
android:visibility="gone"/>
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:id="@+id/ImageView5"
android:layout_marginTop="25dp"
android:layout_below="@+id/ImageView4"
android:layout_alignLeft="@+id/ImageView4"
android:layout_alignStart="@+id/ImageView4"
android:visibility="gone"/>
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:id="@+id/ImageView6"
android:layout_alignTop="@+id/ImageView5"
android:layout_alignLeft="@+id/ImageView3"
android:layout_alignStart="@+id/ImageView3"
android:layout_marginTop="14dp"
android:visibility="gone"/>
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:id="@+id/ImageView7"
android:layout_alignTop="@+id/ImageView6"
android:layout_toRightOf="@+id/ImageView6"
android:layout_marginLeft="22dp"
android:visibility="gone"/>
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:id="@+id/ImageView8"
android:layout_alignTop="@+id/ImageView7"
android:layout_toRightOf="@+id/ImageView2"
android:visibility="gone"/>
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:id="@+id/ImageView9"
android:layout_alignTop="@+id/ImageView8"
android:layout_toRightOf="@+id/ImageView8"
android:layout_marginLeft="26dp"
android:visibility="gone"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/relativeLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true">
<LinearLayout
android:id="@+id/row1"
android:layout_width="600dp"
android:layout_height="wrap_content"
android:gravity="bottom">
<Button
android:id="@+id/b0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight=".15"
android:text="@string/b0"
android:textSize="12sp" />
<Button
android:id="@+id/b1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight=".15"
android:text="@string/b1"
android:textSize="12sp"
android:visibility="visible" />
<Button
android:id="@+id/b2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight=".15"
android:text="@string/b2"
android:textSize="12sp"
android:visibility="visible" />
<Button
android:id="@+id/b3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight=".15"
android:text="@string/b3"
android:textSize="12sp"
android:visibility="visible" />
<Button
android:id="@+id/b4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight=".15"
android:text="@string/b4"
android:textSize="12sp"
android:visibility="visible" />
<Button
android:id="@+id/b5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight=".15"
android:text="@string/b5"
android:textSize="12sp"
android:visibility="visible" />
<Button
android:id="@+id/b6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight=".15"
android:text="@string/b6"
android:textSize="12sp"
android:visibility="visible" />
<Button
android:id="@+id/b7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight=".15"
android:text="@string/b7"
android:textSize="12sp"
android:visibility="visible" />
<Button
android:id="@+id/b8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight=".15"
android:text="@string/b8"
android:textSize="12sp"
android:visibility="visible" />
<Button
android:id="@+id/b9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight=".15"
android:text="@string/b9"
android:textSize="12sp"
android:visibility="visible" />
<Button
android:id="@+id/buttonClear"
android:layout_width="33dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/buttonClear"
android:textSize="12sp" />
</LinearLayout>
</RelativeLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/linearLayout4"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginBottom="33dp">
<TextView
android:id="@+id/printfirst"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0" />
<TextView
android:id="@+id/printsecond"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0" />
<TextView
android:id="@+id/Raspuns_user"
android:layout_width="100dp"
android:layout_weight=".15"
android:maxLines="1"
android:text="0"
android:textColor="@color/textbody"
android:textSize="15sp"
android:layout_height="wrap_content" />
<Button
android:id="@+id/button"
android:layout_width="60dp"
android:layout_height="30dp"
android:textSize="10sp"
android:text="Check" />
<TextView
android:id="@+id/Scorul"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Scor"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/textbody"
android:textSize="10sp" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Ajutati spiridusii sa afle numarul total de piese lipsa. "
android:id="@+id/textView"
android:textSize="13dp"
android:textColor="@color/textbody"
android:layout_alignParentTop="true" />
</RelativeLayout>
如果我用你的代碼圖像仍重疊。我不知道爲什麼。看起來他們在同一時間開始 – Krasiva
@ElenaE請把你的整個活動和佈局代碼問題 – Ayub
@ElenaE我不是動畫專家,給它一些時間,希望有人會回答... – Ayub