Как сделать, чтобы в методе с использованием оператора Thread.sleep() программа работала поочередно?
Не надо тормозить главный поток подобным образом
Гораздо правильнее будет воспользоваться Timer.shedule и отдать ему TimerTaskbut.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String vz = otv1.getText().toString();
                int otv11 = Integer.parseInt(vz);
                if (sum == otv11) {
                    txt3.setText("Правильно, вы угадали!");
                    im.setImageDrawable(getResources().getDrawable(R.drawable.fon1));
                } else {
                    txt3.setText("Неправильно, правильный ответ: " + sum + ".");
                    im.setImageDrawable(getResources().getDrawable(R.drawable.fon2));
                }
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
        Timer timer = new Timer("change");
        Task task = new Task();
        timer.schedule(task, 2000);
            }
        });
}

class Task extends TimerTask {
    @Override
    public void run() {
         im.setImageDrawable(getResources().getDrawable(R.drawable.fon));
        }
}
Как то так
Аналогичный вопрос и ответ на StackOverflow