То, что я пытаюсь сделать, в цикле я последовательно покажу 2 экрана.На первом экране пользователи увидят два изображения за 2500 мс.На втором экране пользователи увидят прямоугольник в течение 1500 мс или до получения реакции от пользователя.Через 1500 мс или после получения реакции снова появится первый экран.
Это мой код:
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;
public class Training2 extends View {
private Bitmap image1, image2;
int state = 0, clickCounterLeft = 0, clickCounterRight = 0;
long startTime;
public Training2(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
paint.setColor(Color.WHITE);
paint.setStyle(Paint.Style.FILL);
canvas.drawPaint(paint);
Constants.gapWidth = (Constants.SCREEN_WITTH - 2 * Constants.imageWidth) / 4;
Constants.gapHeight = (Constants.SCREEN_HEIGHT - Constants.imageHeigth) / 2;
paint.setColor(Color.BLACK);
paint.setTextSize(50);
image1 = BitmapFactory.decodeResource(getResources(), R.drawable.r12);
image1 = Bitmap.createScaledBitmap(image1, Constants.imageWidth, Constants.imageHeigth, true);
image2 = BitmapFactory.decodeResource(getResources(), R.drawable.r13);
image2 = Bitmap.createScaledBitmap(image2, Constants.imageWidth, Constants.imageHeigth, true);
canvas.drawText(Integer.toString((int)(System.currentTimeMillis()-startTime)),50,50,paint);
if (state == 0) { // First Screen
canvas.drawBitmap(image1, 3*Constants.gapWidth+Constants.imageWidth,(3*Constants.gapHeight)/4,null);
canvas.drawBitmap(image2, Constants.gapWidth, (3*Constants.gapHeight)/4,null);
state = 1;
} else if (state == 1) { // Wait until 2500 ms
startTime = System.currentTimeMillis();
while (System.currentTimeMillis()-startTime < 2500) {
}
state = 2;
} else if (state == 2) { // Second Screen
paint.setColor(Color.BLACK);
canvas.drawRect(Constants.SCREEN_WITTH/4-100,Constants.SCREEN_HEIGHT/2 - 100,Constants.SCREEN_WITTH/4+100,Constants.SCREEN_HEIGHT/2 + 100,paint);
state = 3;
} else if (state == 3) { // Wait until 1500 ms or getting a reaction
// I need to show image 1500 ms but before 1500 ms end if user touchs to the screen, state will be 0 again.
state = 0;
}
}
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
int x = (int) event.getX();
switch (action) {
case MotionEvent.ACTION_DOWN:
if (x < Constants.SCREEN_WITTH / 2 && state == 1) {
clickCounterLeft ++;
} else if (x > Constants.SCREEN_WITTH / 2 && state == 1) {
clickCounterRight ++;
}
break;
}
return true;
}
}
Если я использую , а для ожидания 1500 мс, я не могу получить реакцию.Я также попробовал CountDownTimer , но после первого появления экранов изображения появлялись очень короткое время, которое было раньше 1500 мс и 2500 мс.
Я не знаю, что делать.