java - 在添加和删除 TextView 之间暂停程序
问题描述
我正在做一个坦克游戏,我有一个TextView
代表投篮的游戏。现在我想TextView
在特定点显示并在一秒钟后将其删除,看起来镜头会一步一步地走得更远。但是当我添加倒计时或Thread.sleep
程序停止一秒钟但TextView
不会消失时。我想在屏幕上移动 TextView 并且在我的 for 循环的每次迭代之后我想等待一秒钟然后重新排列它?
这是代码:
public void shot(float power, float winkel, Button button) {
if(winkel>90) {
winkel = winkel - 10;
}else if(winkel<90){
winkel = winkel +10;
}
for (double i = 0; i<100;i = i+ 1) {
final TextView textView = new TextView(context);
textView.setText(".");
double x = tanks.get(currentTank).getxPos()+(i*power*Math.cos(winkel *(Math.PI/180)));
double y = tanks.get(currentTank).getyPos()+(-1*(i*power*Math.sin(winkel *(Math.PI/180))));
double gravity = (-1*((9.81/2)*Math.pow(i,2)));
y = (y-gravity);
textView.setX((float) x);
textView.setY((float) y);
layout.addView(textView);
for (int j = 0;j<tanks.size();j++){
if(textView.getX()>tanks.get(j).getxPos()&&textView.getX()<tanks.get(j).getxPos()+100){
if(textView.getY()>tanks.get(j).getyPos()&&textView.getY()<tanks.get(j).getyPos()+100){
float k = tanks.get(j).getxPos()-textView.getX();
if(k<0){
k = k*-1;
}
makeDamage(k,tanks.get(j));
}
}
}
new CountDownTimer(2000,1000){
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
layout.removeView(textView);
}
}.start();
}
newTurn();
}
我想在添加TextView
一秒钟后暂停程序并将其删除。程序停止,但TextView
直到 for 循环完成才消失。然后全部TextViews
消失。
问题解决了: 我已经在一个数组中添加了所有位置,然后这个
public void drawShot(final Button firework, final ArrayList<TextView> toDraw){
final int[] i = {0};
final Handler mHandler = new Handler();
firework.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onClick(View v) {
firework(firework,toDraw.get(i[0]).getX(),toDraw.get(i[0]).getY());
}
});
Runnable runnable = new Runnable() {
@Override
public void run() {
layout.addView(toDraw.get(i[0]));
if(!check(toDraw.get(i[0]))) {
mHandler.postDelayed(this, (long) 1);
}
i[0]++;
}
};
// start it with:
mHandler.post(runnable);
}
解决方案
可能需要在主线程上运行删除命令
Handler mainHandler = new Handler(context.getMainLooper());
Runnable myRunnable = new Runnable() {
@Override
public void run() {
layout.removeView(textView);
}
};
mainHandler.post(myRunnable);
推荐阅读
- javascript - JS:如何检测用户是否正在使用实际的移动设备而不更改视口控件
- android - AutoCompleteTextView - 我正在使用显示来自 API 的值的 autocompletetextview(返回名称和代码)
- c# - DataTable 拒绝填充行
- ios - 如何使 Swift 协议符合特定类型的类?
- javascript - 从 AWS Lambda 触发 AWS EMR 流步骤时超时
- ios - 我的 Xcode 项目中的一些文件和文件夹没有被推送到远程存储库
- vba - vba复制一定范围并粘贴为图片
- python - 如何使用 for 循环检查板上的所有值是否已满
- python - 将字典列表传递给接受 json 文件的函数
- r - 在这种情况下使用“相交”转换小标题中的列表列