В ожидании реакции или определенного времени в Android Studio - PullRequest
0 голосов
/ 18 сентября 2019

То, что я пытаюсь сделать, в цикле я последовательно покажу 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 мс.

Я не знаю, что делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...