嗨,我正在尝试在这个模型中制作一个Android应用程序。主要目的是在以下代码所示的切换条件下随机化案例。当我再次在每种情况下调用该方法时,出现相同图像的可能性很高。所以,我想知道我如何使这个逻辑按顺序显示图像(即,我想随机化,但一旦出现的图像不应该出现,直到所有的图像循环完成)
public class MainActivity extends Activity{
//int blue,green,yellow,red,brown,white,pink,black;
//Boolean BLUE,GREEN,YELLOW,RED,BROWN,WHITE,PINK,BLACK;
ImageView iv1,iv2,iv3,fs;
private Handler handler = new Handler();
MediaPlayer mp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv1 = (ImageView)findViewById(R.id.image1);
iv2 = (ImageView)findViewById(R.id.image2);
iv3 = (ImageView)findViewById(R.id.image3);
fs = (ImageView)findViewById(R.id.img_fs);
fs.setVisibility(View.GONE);
switchingLogic();
}
public void switchingLogic() {
Random random = new Random();
int x = random.nextInt(4)+1;
switch (x) {
case 1:
mp = MediaPlayer.create(getApplicationContext(), R.raw.touch_blue);
mp.start();
iv1.setVisibility(View.VISIBLE);
iv2.setVisibility(View.VISIBLE);
iv3.setVisibility(View.VISIBLE);
iv1.setImageResource(R.drawable.play_blue_1);
iv2.setImageResource(R.drawable.play_blue_2);
iv3.setImageResource(R.drawable.play_blue_3);
iv1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switchCases();
iv_gone();
mp = MediaPlayer.create(getApplicationContext(), R.raw.correct_cheers);
mp.start();
fs.setVisibility(View.VISIBLE);
fs.setImageResource(R.drawable.big_play_blue);
}
});
iv2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
iv2.setVisibility(View.GONE);
}
});
iv3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
iv3.setVisibility(View.GONE);
}
});
break;
case 2:
iv1.setVisibility(View.VISIBLE);
iv2.setVisibility(View.VISIBLE);
iv3.setVisibility(View.VISIBLE);
iv1.setImageResource(R.drawable.play_green_1);
iv2.setImageResource(R.drawable.play_green_2);
iv3.setImageResource(R.drawable.play_green_3);
iv2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switchCases();
iv_gone();
mp = MediaPlayer.create(getApplicationContext(), R.raw.correct_cheers);
mp.start();
fs.setVisibility(View.VISIBLE);
fs.setImageResource(R.drawable.big_play_green);
}
});
iv1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
iv1.setVisibility(View.GONE);
}
});
iv3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
iv3.setVisibility(View.GONE);
}
});
break;
case 3:
iv1.setVisibility(View.VISIBLE);
iv2.setVisibility(View.VISIBLE);
iv3.setVisibility(View.VISIBLE);
iv1.setImageResource(R.drawable.play_yellow_1);
iv2.setImageResource(R.drawable.play_yellow_2);
iv3.setImageResource(R.drawable.play_yellow_3);
iv3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switchCases();
iv_gone();
mp = MediaPlayer.create(getApplicationContext(), R.raw.correct_cheers);
mp.start();
fs.setVisibility(View.VISIBLE);
fs.setImageResource(R.drawable.big_play_yellow);
}
});
iv1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
iv1.setVisibility(View.GONE);
}
});
iv2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
iv2.setVisibility(View.GONE);
}
});
break;
case 4:
iv1.setVisibility(View.VISIBLE);
iv2.setVisibility(View.VISIBLE);
iv3.setVisibility(View.VISIBLE);
iv1.setImageResource(R.drawable.play_red_1);
iv2.setImageResource(R.drawable.play_red_2);
iv3.setImageResource(R.drawable.play_red_3);
iv1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switchCases();
iv_gone();
mp = MediaPlayer.create(getApplicationContext(), R.raw.correct_cheers);
mp.start();
fs.setVisibility(View.VISIBLE);
fs.setImageResource(R.drawable.big_play_red);
}
});
iv2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
iv2.setVisibility(View.GONE);
}
});
iv3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
iv3.setVisibility(View.GONE);
}
});
break;
default:
break;
}
}
protected void switchCases() {
handler.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
fs.setVisibility(View.GONE);
switchingLogic();
}
}, 1500);
}
public void iv_gone() {
iv1.setVisibility(View.GONE);
iv2.setVisibility(View.GONE);
iv3.setVisibility(View.GONE);
}
有什么解决方案或任何替代方案可用。谢谢你。
这是我的评论的一个简单示例,试试这个:
public class MainActivity extends Activity{
//int blue,green,yellow,red,brown,white,pink,black;
//Boolean BLUE,GREEN,YELLOW,RED,BROWN,WHITE,PINK,BLACK;
ImageView iv1,iv2,iv3,fs;
private Handler handler = new Handler();
MediaPlayer mp;
Random random = new Random(); // Use only one random object, do not redeclare it
List<Integer> recentResults; // A list saving your results
public void switchingLogic() {
if(recentResults == null) recentResults = new ArrayList<Integer>();
if(recentResults.size() == 4) recentResults.clear();
int x = random.nextInt(4)+1;
while(recentResults.contains(x)){
x = random.nextInt(4)+1;
}
recentResults.add(x);
switch (x) {
case 1: {
// Other codes
setSpecialOnClickListenerWithDrawable(iv1, R.drawable.big_play_blue);
setGeneralOnClickListener(iv2);
setGeneralOnClickListener(iv3);
break;
}
// Other cases here
}
}
public void setGeneralOnClickListener(ImageView iv) {
iv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// v here will refers back to iv itself
v.setVisibility(View.GONE);
}
});
}
public void setSpecialOnClickListenerWithDrawable(ImageView iv, final int drawable) {
iv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
switchCases();
iv_gone();
mp = MediaPlayer.create(getApplicationContext(), R.raw.correct_cheers);
mp.start();
fs.setVisibility(View.VISIBLE);
fs.setImageResource(drawable);
}
});
}
// Your other codes here
}
我做了一个简单的应用程序来执行上面的操作,我得到了一个x结果:4 3 2 1 2 4 1 3 1 4 2 1 3 2 4 2 1。这是你想要的吗?
问题内容: 我对Swift和编程逻辑很陌生,所以请耐心等待 如何在Swift中生成0到9之间的随机数而不重复最后生成的数字?因为相同的数字不会连续出现两次。 问题答案: 将先前生成的数字存储在变量中,然后将生成的数字与先前的数字进行比较。如果它们匹配,则生成一个新的随机数。重复生成新数字,直到它们不匹配为止。
问题内容: 很抱歉那个愚蠢的问题。如何在javascript切换大小写语言元素中为案件使用条件?像下面的示例一样,当变量<= 5和> 0 时,大小写应该匹配;但是,我的代码不起作用: 感谢您的任何建议! 问题答案: 这有效: 此答案的先前版本认为括号是罪魁祸首。实际上,括号在这里是无关紧要的-唯一必要的是您的case表达式必须为布尔值。 之所以起作用,是因为我们将给开关的值用作比较的依据。因此,同
对于一个开关案例,假设我有5个不同的案例,其中三个共享一个我不想重复的共同动作。以下代码完美地说明了我想要实现的目标(但在切换中): 我能把它写成一个优雅的开关盒吗?我目前的解决方案如下所示:
问题内容: 我知道这个问题有很多种,但是我还没有找到与我的效率问题相关的答案。 我有下面的代码工作正常。 我有一个10个项目的数组,可以从中随机选择一个项目(按Enter键)。该代码保留了不能随机选择的5个最近选择的数组(以避免随着时间的推移而重复过多)。 如果chooseName()函数最初选择了最近5次使用的名称,它只会中断并再次调用自身,重复直到找到“唯一”名称。 我有两个问题: 说这是“递
有人能建议我如何替换下面的代码吗? 如何重写代码以避免重复块{code>case 3:{code block A;break;} ? 如何将案例1和案例3的代码组合起来?
问题内容: 我有一个简单的代码可以生成随机数 上面的方法被调用大约10次(不是循环的)。我想确保所有数字都是唯一的(假设)。 我可以确定每次呼叫都会得到唯一的号码吗?如果没有,我该如何解决? 编辑:我可能已经含糊其词了。我想避免手动检查,如果我真的有唯一的数字,所以我想知道是否有更好的解决方案。 问题答案: 有多种方法可以实现这一目标,哪种方法更合适,取决于您需要从多少个数字中选择。 如果要从大量