Я новичок, работаю над приложением для цветного экрана - оно берет цвета, выбранные пользователем с помощью флажков в действии «настройки», и добавляет их в массив, а затем отображает их на фоне действия «последовательность» после нажатия кнопки «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);
}
});
}
}