У меня есть три макета с изображениями внутри. Когда я нажимаю кнопку «Пуск», представления изображений начинают менять свой ресурс изображения один за другим до 6. Например, если я дважды нажимал кнопку «Пуск», два изображения меняют свой ресурс изображения. Также, если я нажимаю на изображение, это должно остановить процесс изменения изображения, и у меня есть проблемы в этой части. Я написал следующий код:
startButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final int index[];
index = getindex();
Runnable run = new Runnable() {
@Override
public void run() {
Log.d(tag, "New runnable: on " + index[0] + " " + index [1]);
displayFlags(index[0],index[1]);
}
};
handler.post(run);
}
});
Затем я создаю runnables для просмотра изображений, когда я нажимаю кнопку запуска. Метод getIndex () предназначен для получения индекса imageView в linearLayout. Кроме того, я написал следующий метод для displayFlags:
private void displayFlags(int pRow, int pColumn) {
final int row = pRow;
final int column = pColumn;
final ArrayList<Drawable> drawablesList = new ArrayList<>();
//Here is basically for get an image resources.
AssetManager assets = getAssets();
for (int i = 0; i < 6; i ++) {
String nextImage = countriesList.remove(0);
String region = nextImage.substring(0, nextImage.indexOf('-'));
try (InputStream stream =
assets.open(region + "/" + nextImage + ".png")) {
drawablesList.add( Drawable.createFromStream(stream, nextImage));
}
catch (IOException exception) {
Log.e(tag, "Error loading " + nextImage, exception);
}
}
//here I have problems, I think
Runnable runnable = new Runnable() {
int i = 0;
ImageView imageView = (ImageView) rowsLinearLayouts[row].getChildAt(column);
public void run() {
if(startButtonState == false) {
Log.d(tag, "New runnable On: " + row + " " + column );
imageView.setVisibility(View.VISIBLE);
imageView.setImageDrawable(drawablesList.get(i));
i++;
handler.postDelayed(this, 1000);
if (i == 6) {
imageView.setVisibility(View.INVISIBLE);
handler.removeCallbacks(this);
if(requestsExceeded == true){
requestsExceeded = false;
startButton.setEnabled(true);
}
}
} else if (startButtonState == true){
Log.d(tag, "Delete runnable on: " + row + " " + column);
handler.removeCallbacks(this);
imageView.setVisibility(View.INVISIBLE);
startButtonState = false;
startButton.setEnabled(true);
requestsExceeded = false;
}
}
};
startButtonState - флаг для отмены запускаемого объекта. Когда я нажимаю на просмотр изображения, я изменяю флаг в true, поэтому теоретически работоспособность должна быть отменена, но она отменяет другие запускаемые рисунки. Вот слушатель для просмотра изображений.
private View.OnClickListener guessImageViewListener = new View.OnClickListener(){
@Override
public void onClick(View view) {
startButtonState = true;
}
};
Тогда проблема в том, что когда я нажимаю на просмотр изображений, другой просмотр изображений, который находится в другом индексе, останавливает процесс отображения изображений.