android 中的图像按钮按下并按顺序获取数组中的随机图像
Image button in android pressed and get a random image in an array sequentially
public abstract class MainActivity extends Activity implements View.OnClickListener{
private ImageButton bt1;
public int index =0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Drawable[][] images = new Drawable[4][16];
bt1 = (ImageButton) findViewById(R.id.im_bt1);
bt1.setImageDrawable(images[index][(int)(Math.random()*16)]);
bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
index++;
((ImageButton)v).setImageDrawable(images[index][(int)(Math.random()*16)]);
}
});
}
Red RR1 = new Red(R.drawable.rr1);
Red RY1 = new Red(R.drawable.ry1);
Red RG1 = new Red(R.drawable.rg1);
Red RB1 = new Red(R.drawable.rb1);
Green GB1 = new Green(R.drawable.greenblue);
Green GG1 = new Green(R.drawable.greengreen);
Green GR1 = new Green(R.drawable.greenred);
Green GY1 = new Green(R.drawable.greenyellow);
Yellow YY1 = new Yellow(R.drawable.yellowyellow);
Yellow YB1 = new Yellow(R.drawable.yellowblue);
Yellow YG1 = new Yellow(R.drawable.yellowgreen);
Yellow YR1 = new Yellow(R.drawable.yellowred);
Blue BR1= new Blue(R.drawable.br1);
Blue BB1=new Blue(R.drawable.bb1);
Blue BY1=new Blue(R.drawable.by1);
Blue BG1= new Blue(R.drawable.bg1);
Red[] Redarray = new Red[]{
RR1,RY1,RG1,RB1
};
Green[] Greenarray = new Green[]{
GR1,GB1,GY1,GG1
};
Blue[] Bluearray = new Blue[]{
BB1,BY1,BG1,BR1
};
Yellow[] Yellowarray = new Yellow[]{
YB1,YG1,YR1,YY1
};
}
我的布局中有一个 ImageButton
,我想按下按钮并从数组中获取另一个随机 ImageButton
,然后在我按下那个按钮时获取另一个,但我希望它按顺序显示在我制作的数组上。
图像数组 1
图像数组 2
图像数组 3
图片数组 4
图像按钮从 array1
到另一个随机图像按钮从 array2
到另一个图像按钮从 array 3
...
编辑:所以我制作了所有数组的 class 但它不起作用..我正在努力制作数组数组..你们可以检查我的代码吗?谢谢..
首先:我不会每次都换另一个ImageButton,而是只改变显示的图像。
其次:您需要一组 ImageButtons(或可绘制对象)数组。
然后你需要一个索引用于你的外部数组,并且需要一个随机值用于你的内部数组。
Drawable[][] images = new Drawable[4][10]; //your 4 outer arrays with 10 drawables to choose randomly from // needs to be a member variable
fillArray();//add your drawables to the arrays here
int index = 0;//needs to be a member variable too
ImageButton button = new ImageButton(this);
button.setImageDrawable(images[index][(int)(Math.random()*10)]);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
index++;
((ImageButton)v).setImageDrawable(images[index][(int)(Math.random()*10)]);
}
});
问题似乎是您从未重置索引变量。你可以这样解决
...
final Random random = new Random();
...
@Override
protected void onCreate(Bundle savedInstanceState) {
...
bt1 = (ImageButton) findViewById(R.id.im_bt1);
bt1.setImageDrawable(randomFromArray(images[index]));
bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (++index == 4) {
// reset index if it is too high after increment
index = 0;
}
((ImageButton) v).setImageDrawable(randomFromArray(images[index]));
}
public <T> T randomFromArray(final T[] array) {
return array[random.nextInt(array.length)];
}
public abstract class MainActivity extends Activity implements View.OnClickListener{
private ImageButton bt1;
public int index =0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Drawable[][] images = new Drawable[4][16];
bt1 = (ImageButton) findViewById(R.id.im_bt1);
bt1.setImageDrawable(images[index][(int)(Math.random()*16)]);
bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
index++;
((ImageButton)v).setImageDrawable(images[index][(int)(Math.random()*16)]);
}
});
}
Red RR1 = new Red(R.drawable.rr1);
Red RY1 = new Red(R.drawable.ry1);
Red RG1 = new Red(R.drawable.rg1);
Red RB1 = new Red(R.drawable.rb1);
Green GB1 = new Green(R.drawable.greenblue);
Green GG1 = new Green(R.drawable.greengreen);
Green GR1 = new Green(R.drawable.greenred);
Green GY1 = new Green(R.drawable.greenyellow);
Yellow YY1 = new Yellow(R.drawable.yellowyellow);
Yellow YB1 = new Yellow(R.drawable.yellowblue);
Yellow YG1 = new Yellow(R.drawable.yellowgreen);
Yellow YR1 = new Yellow(R.drawable.yellowred);
Blue BR1= new Blue(R.drawable.br1);
Blue BB1=new Blue(R.drawable.bb1);
Blue BY1=new Blue(R.drawable.by1);
Blue BG1= new Blue(R.drawable.bg1);
Red[] Redarray = new Red[]{
RR1,RY1,RG1,RB1
};
Green[] Greenarray = new Green[]{
GR1,GB1,GY1,GG1
};
Blue[] Bluearray = new Blue[]{
BB1,BY1,BG1,BR1
};
Yellow[] Yellowarray = new Yellow[]{
YB1,YG1,YR1,YY1
};
}
我的布局中有一个 ImageButton
,我想按下按钮并从数组中获取另一个随机 ImageButton
,然后在我按下那个按钮时获取另一个,但我希望它按顺序显示在我制作的数组上。
图像数组 1 图像数组 2 图像数组 3 图片数组 4
图像按钮从 array1
到另一个随机图像按钮从 array2
到另一个图像按钮从 array 3
...
编辑:所以我制作了所有数组的 class 但它不起作用..我正在努力制作数组数组..你们可以检查我的代码吗?谢谢..
首先:我不会每次都换另一个ImageButton,而是只改变显示的图像。
其次:您需要一组 ImageButtons(或可绘制对象)数组。 然后你需要一个索引用于你的外部数组,并且需要一个随机值用于你的内部数组。
Drawable[][] images = new Drawable[4][10]; //your 4 outer arrays with 10 drawables to choose randomly from // needs to be a member variable
fillArray();//add your drawables to the arrays here
int index = 0;//needs to be a member variable too
ImageButton button = new ImageButton(this);
button.setImageDrawable(images[index][(int)(Math.random()*10)]);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
index++;
((ImageButton)v).setImageDrawable(images[index][(int)(Math.random()*10)]);
}
});
问题似乎是您从未重置索引变量。你可以这样解决
...
final Random random = new Random();
...
@Override
protected void onCreate(Bundle savedInstanceState) {
...
bt1 = (ImageButton) findViewById(R.id.im_bt1);
bt1.setImageDrawable(randomFromArray(images[index]));
bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (++index == 4) {
// reset index if it is too high after increment
index = 0;
}
((ImageButton) v).setImageDrawable(randomFromArray(images[index]));
}
public <T> T randomFromArray(final T[] array) {
return array[random.nextInt(array.length)];
}