随机select两个ImageView之一并更新ResourceImage
Randomly select one of two ImageViews and update ResourceImage
我在布局中创建了两个 ImageView,我们称它们为 imageviewTop
和 imageviewBottom
。
我将两张图片保存到可绘制对象中(green_image.png 和 red_image.png)。
我还添加了一个按钮,我想做的是,当单击该按钮时,其中一个 ImageViews 将随机 selected 并且从 green_image 变为 red_image.
我已经尝试创建一个 switch/case 语句并生成一个随机数,例如 1 或 2。
基于这个数字,case 语句将更新顶部或底部图像。
这适用于 2 个 ImageView,但如果我有 100 个,我需要在代码中创建 100 个案例。
我正在寻找一个更动态的选项。
我知道如何为 ImageView 更新图像,我正在努力解决如何 select 随机一个 ImageView 的部分,如果可能的话。
代码如下:
public class MainActivity extends Activity {
ImageView imagevieTop, imageviewBottom;
Button randomButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imagevieTop = (ImageView) findViewById(R.id.imageViewTop);
imageviewBottom = (ImageView) findViewById(R.id.imageViewBottom);
randomButton = (Button) findViewById(R.id.buttonRandom);
randomButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// randomly select one of the two imageviews
// for example: randomly selected imageviewTop
// set imageresource red_image to imageviewTop
//at next start up it would select either top or bottom, 50%-50% and then assign the image to it
}
});
}
}
你可以只使用一个 ImageView,并随机化你绘制的图片。
或者,您可以调整它以使用一组 ImageView。你的选择。
不过,您想要的行是 int index = random.nextInt(imgs.length);
从列表中获取随机索引。
public class MainActivity extends Activity {
int[] imgs = new int[] { R.drawable.green_image, R.drawable.red_image };
Button randomButton;
private final Random random = new Random();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageView imgView = (ImageView) findViewById(R.id.imageView);
randomButton = (Button) findViewById(R.id.buttonRandom);
randomButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int index = random.nextInt(imgs.length);
// randomly select one of the two drawables
int resId = imgs[index];
// set imageresource imgView
Drawable d = getResources().getDrawable(resId);
imgView.setImageDrawable(d);
}
});
}
}
要处理“100 个 ImageViews”问题,我建议不要复制 100 行代码,而是循环遍历合理的 ID 值。
List<ImageView> imgViews = new ArrayList<ImageView>();
for (int i = 0; i < 100; i++) {
int resId = getResources().getIdentifier("imgView" + i, "id", getPackageName());
ImageView nextImg = (ImageView) findViewById(resId);
imgViews.add(nextImg);
}
如果您想对 "n" 个 ImageView 元素进行动态 selection,那么您需要将它们存储在数据结构中(例如数组、列表等)。 ).例如,此代码将 select 列表中的随机 ImageView:
public ImageView getRandomImageView(final List<ImageView> imageViewList) {
final Random random = new Random();
//The "nextInt" method works in the half-open range [0, n), so it'll never be equal to the list size.
final int randomElement = random.nextInt(imageViewList.size());
return imageViewList.get(randomElement);
}
在你的情况下,在固定变量中声明了两个 ImageView("imagevieTop" 和 "imageviewBottom"),那么你需要将它们传递给列表或类似的东西以便 select其中之一是动态的。
我在布局中创建了两个 ImageView,我们称它们为 imageviewTop
和 imageviewBottom
。
我将两张图片保存到可绘制对象中(green_image.png 和 red_image.png)。
我还添加了一个按钮,我想做的是,当单击该按钮时,其中一个 ImageViews 将随机 selected 并且从 green_image 变为 red_image.
我已经尝试创建一个 switch/case 语句并生成一个随机数,例如 1 或 2。
基于这个数字,case 语句将更新顶部或底部图像。
这适用于 2 个 ImageView,但如果我有 100 个,我需要在代码中创建 100 个案例。
我正在寻找一个更动态的选项。
我知道如何为 ImageView 更新图像,我正在努力解决如何 select 随机一个 ImageView 的部分,如果可能的话。
代码如下:
public class MainActivity extends Activity {
ImageView imagevieTop, imageviewBottom;
Button randomButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imagevieTop = (ImageView) findViewById(R.id.imageViewTop);
imageviewBottom = (ImageView) findViewById(R.id.imageViewBottom);
randomButton = (Button) findViewById(R.id.buttonRandom);
randomButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// randomly select one of the two imageviews
// for example: randomly selected imageviewTop
// set imageresource red_image to imageviewTop
//at next start up it would select either top or bottom, 50%-50% and then assign the image to it
}
});
}
}
你可以只使用一个 ImageView,并随机化你绘制的图片。
或者,您可以调整它以使用一组 ImageView。你的选择。
不过,您想要的行是 int index = random.nextInt(imgs.length);
从列表中获取随机索引。
public class MainActivity extends Activity {
int[] imgs = new int[] { R.drawable.green_image, R.drawable.red_image };
Button randomButton;
private final Random random = new Random();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageView imgView = (ImageView) findViewById(R.id.imageView);
randomButton = (Button) findViewById(R.id.buttonRandom);
randomButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int index = random.nextInt(imgs.length);
// randomly select one of the two drawables
int resId = imgs[index];
// set imageresource imgView
Drawable d = getResources().getDrawable(resId);
imgView.setImageDrawable(d);
}
});
}
}
要处理“100 个 ImageViews”问题,我建议不要复制 100 行代码,而是循环遍历合理的 ID 值。
List<ImageView> imgViews = new ArrayList<ImageView>();
for (int i = 0; i < 100; i++) {
int resId = getResources().getIdentifier("imgView" + i, "id", getPackageName());
ImageView nextImg = (ImageView) findViewById(resId);
imgViews.add(nextImg);
}
如果您想对 "n" 个 ImageView 元素进行动态 selection,那么您需要将它们存储在数据结构中(例如数组、列表等)。 ).例如,此代码将 select 列表中的随机 ImageView:
public ImageView getRandomImageView(final List<ImageView> imageViewList) {
final Random random = new Random();
//The "nextInt" method works in the half-open range [0, n), so it'll never be equal to the list size.
final int randomElement = random.nextInt(imageViewList.size());
return imageViewList.get(randomElement);
}
在你的情况下,在固定变量中声明了两个 ImageView("imagevieTop" 和 "imageviewBottom"),那么你需要将它们传递给列表或类似的东西以便 select其中之一是动态的。