Java 实时更改图像
我有以下代码:Java 实时更改图像,java,android,Java,Android,我有以下代码: package com.example.helloandroid; import java.util.Random; import android.app.Activity; import android.os.Bundle; import android.widget.ImageView; import android.widget.TableLayout; import android.widget.TableRow; public class HelloAndroid
package com.example.helloandroid;
import java.util.Random;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TableLayout;
import android.widget.TableRow;
public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
for(int i = 0; i < 6; i++) {
TableLayout tl = (TableLayout) findViewById(R.id.T);
TableRow tr = (TableRow) tl.getChildAt(i);
for(int j = 0; j < 6; j++) {
ImageView img = (ImageView) tr.getChildAt(j);
Random randomGenerator = new Random();
int randomInt = randomGenerator.nextInt(2);
if (randomInt == 1) {
img.setImageResource(R.drawable.w);
}
else {
img.setImageResource(R.drawable.b);
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
package com.example.helloandroid;
导入java.util.Random;
导入android.app.Activity;
导入android.os.Bundle;
导入android.widget.ImageView;
导入android.widget.TableLayout;
导入android.widget.TableRow;
公共类HelloAndroid扩展活动{
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
对于(int i=0;i<6;i++){
TableLayout tl=(TableLayout)findviewbyd(R.id.T);
TableRow tr=(TableRow)tl.getChildAt(i);
对于(int j=0;j<6;j++){
ImageView img=(ImageView)tr.getChildAt(j);
Random randomGenerator=新的Random();
int randomInt=randomGenerator.nextInt(2);
if(randomInt==1){
img.setImageResource(R.drawable.w);
}
否则{
img.setImageResource(R.drawable.b);
}
试一试{
睡眠(100);
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
}
}
我希望当我改变一个图像时,它在屏幕上也会改变。这段代码只是冻结,直到所有图像都被更改。为什么?我已经修改了您的代码,请尝试下面的代码
public class HelloAndroid extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new Thread(new Runnable()
{
@Override
public void run()
{
for (int i = 0; i < 6; i++)
{
TableLayout tl = (TableLayout) findViewById(R.id.T);
TableRow tr = (TableRow) tl.getChildAt(i);
for (int j = 0; j < 6; j++)
{
ImageView img = (ImageView) tr.getChildAt(j);
Random randomGenerator = new Random();
int randomInt = randomGenerator.nextInt(2);
runOnUiThread(new Runnable()
{
@Override
public void run()
{
if (randomInt == 1)
{
img.setImageResource(R.drawable.w);
}
else
{
img.setImageResource(R.drawable.b);
}
}
});
try
{
Thread.sleep(100);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}).start();
}
}
公共类HelloAndroid扩展活动
{
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
新线程(newrunnable())
{
@凌驾
公开募捐
{
对于(int i=0;i<6;i++)
{
TableLayout tl=(TableLayout)findviewbyd(R.id.T);
TableRow tr=(TableRow)tl.getChildAt(i);
对于(int j=0;j<6;j++)
{
ImageView img=(ImageView)tr.getChildAt(j);
Random randomGenerator=新的Random();
int randomInt=randomGenerator.nextInt(2);
runOnUiThread(新的Runnable()
{
@凌驾
公开募捐
{
if(randomInt==1)
{
img.setImageResource(R.drawable.w);
}
其他的
{
img.setImageResource(R.drawable.b);
}
}
});
尝试
{
睡眠(100);
}
捕捉(中断异常e)
{
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
}
}).start();
}
}
尝试使用a来执行此操作,因为您的所有代码都在主线程上运行,因此它必须在视图准备就绪(解释冻结)之前完成所有循环。它告诉我应用程序已意外关闭。请调试并检查它在哪一行运行或粘贴日志输出