我有三种布局,其中包含“图像视图”。当我按下开始按钮时,图像视图开始逐个更改其图像资源,直到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);
}
});
然后,当我按下开始按钮时,我正在为图像视图创建可运行对象。方法getIndex()用于获取linearLayout中imageView的索引。另外,我为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;
}
};
然后,问题是当我在图像视图上按其他索引视图中的其他图像视图时,将停止显示图像的过程。