Анимация цветового массива в Android Studio - PullRequest
0 голосов
/ 03 августа 2020

Я новичок, работаю над приложением для цветного экрана - оно берет цвета, выбранные пользователем с помощью флажков в действии «настройки», и добавляет их в массив, а затем отображает их на фоне действия «последовательность» после нажатия кнопки «Go».

Я могу заставить приложение анимировать только первые 2 цвета с помощью ValueAnimator - это не работает через l oop - есть ли другой способ, которым я должен быть делать это ??

Любая помощь приветствуется

Действия настроек:

public class SettingsActivity extends AppCompatActivity implements View.OnClickListener {

    ArrayList<Integer> colorList = new ArrayList<Integer>();
    Array[] colorArray;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);

        Button sequence_go = findViewById(R.id.sequence_go);

        CheckBox yellow = findViewById(R.id.yellow_check);
        CheckBox orange = findViewById(R.id.orange_check);
        CheckBox red = findViewById(R.id.red_check);
        CheckBox pink = findViewById(R.id.pink_check);
        CheckBox purple = findViewById(R.id.purple_check);
        CheckBox blue = findViewById(R.id.blue_check);
        CheckBox aqua = findViewById(R.id.aqua_check);
        CheckBox lime = findViewById(R.id.lime_check);
        CheckBox green = findViewById(R.id.green_check);
        CheckBox white = findViewById(R.id.white_check);

        overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);

        AnimationDrawable rainbowBtn = (AnimationDrawable) sequence_go.getBackground();
        rainbowBtn.setEnterFadeDuration(500);
        rainbowBtn.setExitFadeDuration(500);
        rainbowBtn.start();

        sequence_go.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (colorList.size() < 1) {
                    Toast.makeText(SettingsActivity.this, "Please choose at least one color to continue",
                            Toast.LENGTH_SHORT).show();
                } else {

                    Intent intent = new Intent(getApplicationContext(), Sequence_Activity.class);
                    intent.putExtra("colorList", colorList);

                    startActivity(intent);
                }
            }
        });
    }

    @Override
    protected void onResume() {

        if (colorList.size() > 0) {
            colorList.subList(0, colorList.size()).clear();
        }

        View overlay = findViewById(R.id.activity_settings);
        overlay.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
                View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN);

        WindowManager.LayoutParams layout = getWindow().getAttributes();
        layout.screenBrightness = 1;
        getWindow().setAttributes(layout);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

        super.onResume();
    }

    @Override
    public void onClick(View v) {

        switch (v.getId()) {
            case R.id.white_check:

                colorList.add(getResources().getColor(R.color.white));
                System.out.println(colorList);
                break;

            case R.id.yellow_check:
                colorList.add(getResources().getColor(R.color.yellow));
                System.out.println(colorList);
                break;

            case R.id.orange_check:
                colorList.add(getResources().getColor(R.color.orange));
                System.out.println(colorList);
                break;

            case R.id.red_check:
                colorList.add(getResources().getColor(R.color.red));
                System.out.println(colorList);
                break;

            case R.id.pink_check:
                colorList.add(getResources().getColor(R.color.pink));
                System.out.println(colorList);
                break;

            case R.id.purple_check:
                colorList.add(getResources().getColor(R.color.purple));
                System.out.println(colorList);
                break;

            case R.id.blue_check:
                colorList.add(getResources().getColor(R.color.blue));
                System.out.println(colorList);
                break;

            case R.id.aqua_check:
                colorList.add(getResources().getColor(R.color.aqua));
                System.out.println(colorList);
                break;

            case R.id.lime_check:
                colorList.add(getResources().getColor(R.color.lime));
                System.out.println(colorList);
                break;

            case R.id.green_check:
                colorList.add(getResources().getColor(R.color.green));
                System.out.println(colorList);
                break;
        }
    }
}

Действия последовательности:

public class Sequence_Activity extends AppCompatActivity {
    private ArrayList<Integer> colorList;
    private int counter = 0;

    @Override

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sequence);
        final ConstraintLayout sequence = findViewById(R.id.sequence_screen);

        Bundle bundle = getIntent().getExtras();
        colorList = bundle.getIntegerArrayList("colorList");

        for (int i = 0; i < colorList.size() - 1; i++) {
            System.out.println("Counter = " + counter);
            System.out.println("colorList index = " + colorList);
            ValueAnimator colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), (colorList.get(counter)), (colorList.get(counter + 1)));
            colorAnimation.setDuration(1000); // milliseconds
            colorAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

                @Override
                public void onAnimationUpdate(ValueAnimator animator) {
                    sequence.setBackgroundColor((int) animator.getAnimatedValue());
                }
            });

            colorAnimation.setRepeatCount(ValueAnimator.INFINITE); 
            colorAnimation.setRepeatMode(ValueAnimator.REVERSE); 
            colorAnimation.start();

        }

        sequence.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), SettingsActivity.class);

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