Android UI线程帮助新增功能
我试图使4个图像在一段时间后设置为不可见和可见,比如蓝色图像显示、蓝色图像隐藏、黄色图像显示、黄色图像隐藏。我希望不使用任何事件,只使用for循环。我正在尝试以下方法,但不起作用。我不熟悉android和图形。请帮帮我Android UI线程帮助新增功能,android,android-emulator,Android,Android Emulator,我试图使4个图像在一段时间后设置为不可见和可见,比如蓝色图像显示、蓝色图像隐藏、黄色图像显示、黄色图像隐藏。我希望不使用任何事件,只使用for循环。我正在尝试以下方法,但不起作用。我不熟悉android和图形。请帮帮我 public class GameActivity extends Activity { /** Called when the activity is first created. */ private Handler mHandler = new Handler();
public class GameActivity extends Activity {
/** Called when the activity is first created. */
private Handler mHandler = new Handler();
ImageView[] imViews = new ImageView[4];
ImageView imageView1;
ImageView imageView2;
ImageView imageView3;
ImageView imageView4;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.myviewlay);
imageView1= (ImageView)findViewById(R.id.ImageView01);
imageView2= (ImageView)findViewById(R.id.ImageView02);
imageView3= (ImageView)findViewById(R.id.ImageView03);
imageView4= (ImageView)findViewById(R.id.ImageView04);
final ImageView[] imViews = new ImageView[4];
imViews[0] = imageView1;
imViews[1] = imageView2;
imViews[2] = imageView3;
imViews[3] = imageView4;
mHandler.removeCallbacks(mUpdateTimeTask);
mHandler.postDelayed(mUpdateTimeTask, 100);
}
private Runnable mUpdateTimeTask = new Runnable() {
public void run() {
for(int i=0; i < 5; i++)
{
imViews[i].setVisibility(View.INVISIBLE);
mHandler.postDelayed(this, 1000);
imViews[i].setVisibility(View.INVISIBLE);
mHandler.postDelayed(this, 1000);
}
}};
}
尝试使用:
imViews[i].setVisibility(View.GONE);
正如@MByD所说,只调用一次就可以改进代码。使用postDelayed()无法实现这一点。该方法不会在循环中暂停您的方法。这可以通过使用Thread.sleep()来实现。但是,在UI线程上执行此操作最终将导致强制关闭,因为您将阻塞UI线程太长时间 基本上,您需要某种后台线程,执行等待您的任务,然后向UI线程发布一个runnable,显示/隐藏视图
private Runnable mUpdateTimeTask = new Runnable() {
public void run() {
for(int i=0; i < 5; i++)
{
final ImageView view = imViews[i];
mHandler.post(new Runnable() {
public void run() {
view.setVisibility(View.INVISIBLE);
}
});
try {
Thread.sleep(1000);
} catch (Exception e) {}
mHandler.post(new Runnable() {
public void run() {
view.setVisibility(View.VISIBLE);
}
});
try {
Thread.sleep(1000);
} catch (Exception e) {}
}
}};
}
您可能还想查看这个类,它可以帮助您定期运行东西。有几种方法可以做这些事情 哦,谢谢你,我没有意识到,但现在它给了我一个例外,我做错了什么吗?很抱歉,我对Android和图形方面的东西还不熟悉。。。日志猫说第60行有错误,第60行是mHandler.postDelayed(这是1000);有什么例外?它是第一个postDelayed还是第二个postDelayed?在第二个postDelayed上,但后来我把它注释掉了,现在它是imViews[i].setVisibility(View.INVISIBLE);在您的run()中是否有类似的NullPointException:`if(imViews[i]!=null){imViews[i].setVisibility(imViews[i].getVisibility()==View.VISIBLE?View.go:View.VISIBLE);mHandler.postDelayed(…);}else{//Log something}` imViews成员变量从未填充,由于onCreate()方法中定义了一个同名的局部变量。哇,谢谢stephan,它告诉我imViews[i]中的i必须是final,当我生成i final时,我可以合成i++;我还应该怎么迭代呢?噢,stephan,非常感谢你对我的帮助和耐心,我得到了上面显示的异常。。特别是第65行,它是view.setVisibility(view.INVISIBLE);我把它们贴在了我的原始信息上。请看我对你原始帖子的评论。您需要从onCreate()方法中删除一行,因为您不会用数据填充成员变量。很抱歉,我是这样一个新手,所以我应该更改什么以避免这种异常。。。?imViews是一个静态数组,因此我可以在mUpdateTask…中使用它,这是导致问题的变量?很抱歉,所有这些视图、图像。。runnables对我来说是新的:(–哇,它工作得非常好…最后一个问题,我保证>。要消除针对不同解决方案报告的NullPointerException,请从onCreate()中删除行
final ImageView[]imViews=new ImageView[4];
)方法。哇,效果非常好。最后一个问题,我保证>。别介意,我明白了!!:)。。。我希望我有你的头脑:)。非常感谢你的帮助
private Runnable mUpdateTimeTask = new Runnable() {
public void run() {
for(int i=0; i < 5; i++)
{
final ImageView view = imViews[i];
mHandler.post(new Runnable() {
public void run() {
view.setVisibility(View.INVISIBLE);
}
});
try {
Thread.sleep(1000);
} catch (Exception e) {}
mHandler.post(new Runnable() {
public void run() {
view.setVisibility(View.VISIBLE);
}
});
try {
Thread.sleep(1000);
} catch (Exception e) {}
}
}};
}
new Thread(mUpdateTimeTask).start();