public class BubbleSortActivity extends SortActivity{ ConstraintLayout constraintLayout; final Handler handler = new Handler(); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sort); shuffleButton = findViewById(R.id.shuffle); sortButton = findViewById(R.id.start); constraintLayout = findViewById(R.id.mainLayout); ID = Arrays.asList(R.id.num1,R.id.num2,R.id.num3,R.id.num4,R.id.num5,R.id.num6,R.id.num7,R.id.num8,R.id.num9); DRAWABLE = Arrays.asList(R.drawable.icons8_1_24,R.drawable.icons8_2_24,R.drawable.icons8_3_24,R.drawable.icons8_4_24,R.drawable.icons8_5_24, R.drawable.icons8_6_24,R.drawable.icons8_7_24,R.drawable.icons8_8_24,R.drawable.icons8_9_24); RED_DRAWABLE = Arrays.asList(R.drawable.icons8_1_24_red,R.drawable.icons8_2_24_red,R.drawable.icons8_3_24_red,R.drawable.icons8_4_24_red,R.drawable.icons8_5_24_red, R.drawable.icons8_6_24_red,R.drawable.icons8_7_24_red,R.drawable.icons8_8_24_red,R.drawable.icons8_9_24_red); YELLOW_DRAWABLE = Arrays.asList(R.drawable.icons8_1_24_yellow,R.drawable.icons8_2_24_yellow,R.drawable.icons8_3_24_yellow,R.drawable.icons8_4_24_yellow,R.drawable.icons8_5_24_yellow, R.drawable.icons8_6_24_yellow,R.drawable.icons8_7_24_yellow,R.drawable.icons8_8_24_yellow,R.drawable.icons8_9_24_yellow); shuffleButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { shuffleList(); updateList(); } }); sortButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { swap(1,2); } }); } @Override void updateList() { ConstraintSet constraintSet = new ConstraintSet(); constraintSet.clone(constraintLayout); for (int i=0;i<list.length;i++){ constraintSet.connect(ID.get(list[i]),ConstraintSet.START,(i==0)?R.id.mainLayout:ID.get(list[i-1]),(i==0)?ConstraintSet.START:ConstraintSet.END); constraintSet.connect(ID.get(list[i]),ConstraintSet.END,(i==list.length-1)?R.id.mainLayout:ID.get(list[i+1]),(i==list.length-1)?ConstraintSet.END:ConstraintSet.START); } constraintSet.applyTo(constraintLayout); } @Override boolean check(final int index1,final int index2) { final ImageView view1 = findViewById(ID.get(list[index1])); final ImageView view2 = findViewById(ID.get(list[index2])); view1.setImageResource(YELLOW_DRAWABLE.get(list[index1])); view2.setImageResource(YELLOW_DRAWABLE.get(list[index2])); handler.postDelayed(new Runnable() { @Override public void run() { view1.setImageResource(DRAWABLE.get(list[index1])); view2.setImageResource(DRAWABLE.get(list[index2])); } },500); return (list[index1]>list[index2]); } @Override void swap(final int index1,final int index2) { final ImageView view1 = findViewById(ID.get(list[index1])); final ImageView view2 = findViewById(ID.get(list[index2])); view1.setImageResource(RED_DRAWABLE.get(list[index1])); view2.setImageResource(RED_DRAWABLE.get(list[index2])); int buff = list[index1]; list[index1] = list[index2]; list[index2] = buff; handler.postDelayed(new Runnable() { @Override public void run() { updateList(); } },3000); handler.postDelayed(new Runnable() { @Override public void run() { view1.setImageResource(DRAWABLE.get(list[index1])); view2.setImageResource(DRAWABLE.get(list[index2])); } },3000); } } public abstract class SortActivity extends AppCompatActivity { int[] list = {0,1,2,3,4,5,6,7,8}; Button shuffleButton; Button sortButton; List<Integer> ID; List<Integer> DRAWABLE; List<Integer> YELLOW_DRAWABLE; List<Integer> RED_DRAWABLE; void shuffleList() { // If running on Java 6 or older, use `new Random()` on RHS here Random rnd = ThreadLocalRandom.current(); for (int i = list.length - 1; i > 0; i--) { int index = rnd.nextInt(i + 1); // Simple swap int a = list[index]; list[index] = list[i]; list[i] = a; } } abstract void sort(); abstract boolean check(final int index1,final int index2); abstract void swap(final int index1,final int index2); abstract void updateList(); } <ImageView android:id="@+id/num9" style="@style/ArrayElement" android:layout_width="40dp" android:layout_height="40dp" android:src="@drawable/icons8_9_24" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toEndOf="@+id/num8" app:layout_constraintTop_toTopOf="parent" /> 

When you press the button for the first time, the color simply changes, the numbers in places do not change, they change only from the second time.

enter image description here

    0