我在Android Studio中遇到问题。我想要的效果如下:
案例:单击图像按钮时,一些按钮会随机更改其位置和位置。所有按钮都位于风景屏幕的上半部分,并且允许它们仅在风景屏幕的上半部分而不是下半部分的屏幕上随机更改其位置。它们彼此不重叠。单击图像按钮后,所有按钮均会随机更改其位置,但图像按钮本身仍保持其原始位置。
希望你能帮助我。提前致谢!
主要活动代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_keyboard);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
Button buttons[] = new Button[5];
text = (TextView) findViewById(R.id.txt);
buttons[0] = (Button) findViewById(R.id.bt1);
buttons[0].setOnClickListener(this);
buttons[1] = (Button) findViewById(R.id.bt2);
buttons[1].setOnClickListener(this);
buttons[2] = (Button) findViewById(R.id.bt3);
buttons[2].setOnClickListener(this);
buttons[3] = (Button) findViewById(R.id.bt4);
buttons[3].setOnClickListener(this);
buttons[4] = (Button) findViewById(R.id.bt5);
buttons[4].setOnClickListener(this);
Imgbtn = (ImageButton) findViewById(R.id.Imgbtn);
}
@Override
public void onClick(View v) {
Random rand = new Random();
View decorView = getWindow().getDecorView();
int screenWidth = decorView.getWidth();
int screenHeight = decorView.getHeight();
v.setX(rand.nextInt(screenWidth - v.getWidth()));
v.setY(rand.nextInt(screenHeight - v.getHeight()));}
Imgbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(text.getText().toString().equals("COC")){
LayoutInflater li = getLayoutInflater();
View layout = li.inflate(R.layout.correct_toast, (ViewGroup)
findViewById(R.id.correct_toast_layout_id));
Toast toast = new Toast(getApplicationContext());
toast.setView(layout);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setView(layout);//setting the view of custom correct_toast layout
toast.show();
MediaPlayer ring= MediaPlayer.create(getApplicationContext(),R.raw.correct);
ring.start();
}else{
LayoutInflater li = getLayoutInflater();
View layout = li.inflate(R.layout.wrong_toast, (ViewGroup) findViewById(R.id.wrong_toast_layout_id));
Toast toast = new Toast(getApplicationContext());
toast.setView(layout);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setView(layout);//setting the view of custom correct_toast layout
toast.show();
MediaPlayer ring= MediaPlayer.create(getApplicationContext(),R.raw.wrong);
ring.start();
}
}
});
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
要实现您所描述的功能,您需要对按钮的随机位置设置一些限制,确保它们只在屏幕的上半部分移动,并且不重叠。以下是一种可能的实现方式:
首先,定义一个方法来检查新位置是否在屏幕的上半部分并且与其他按钮不重叠。然后,在onClick
事件中调用这个方法来更新按钮的位置。
private boolean isValidNewPosition(View button, int newX, int newY) {
// 确保Y坐标在上半部分
int screenHeight = getWindow().getDecorView().getHeight();
int halfScreenHeight = screenHeight / 2;
if (newY >= halfScreenHeight) return false;
// 检查新位置是否与其他按钮重叠
for (Button b : buttons) {
if (b != button && b.getX() == newX && b.getY() == newY) {
return false;
}
}
return true;
}
onClick
方法以使用新位置验证:@Override
public void onClick(View v) {
Random rand = new Random();
while (true) {
int newPosX = rand.nextInt(getWindow().getDecorView().getWidth() - v.getWidth());
int newPosY = rand.nextInt(getWindow().getDecorView().getHeight() / 2); // 只在上半部分
if (isValidNewPosition(v, newPosX, newPosY)) {
v.setX(newPosX);
v.setY(newPosY);
break; // 找到合适的位置后退出循环
}
}
}
// 对于ImageButton Imgbtn的点击事件,保持不变。
这段代码通过引入isValidNewPosition
方法来确保每次按钮移动时都位于屏幕的上半部分,并且不会与任何其他按钮重叠。请注意,这种方法在按钮数量较多或屏幕空间有限的情况下可能会导致性能问题,因为它依赖于不断尝试直到找到一个有效位置。对于实际应用,可能需要更高效的算法来处理位置分配,比如预先计算可用区域并从这些区域内随机选择。