我想在设置Bitmap类的像素时更新ImageView。但ImageView无法正常工作。我已经使用了ui线程。我该怎么办? 这是我的代码。
public class MainActivity extends AppCompatActivity {
ImageView img;
DisplayMetrics dm;
Bitmap bit;
int x = 1, y = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
img = (ImageView)findViewById(R.id.image);
bit = Bitmap.createBitmap(300, 400, RGB_565);
for(int i = 0; i < 300; i++){
for(int j = 0; j < 400; j++)
bit.setPixel(i,j, Color.WHITE);
}
runOnUiThread(new Runnable() {
@Override
public void run() {
while(true) {
bit.setPixel(x++, y++, Color.BLACK);
img.setImageBitmap(bit);
img.invalidate();
try{
Thread.sleep(100);
}catch (Exception e){
}
}
}
});
}
}
答案 0 :(得分:0)
尝试使用Handler更新视图。
img.post(new Runnable() {
@Override
public void run() {
}
});
答案 1 :(得分:0)
将postDelayed用于ImageView.post()
方法。我在机器上完成了这个。另外,请勿在像素结束时使用while(true)
停止它。
img = (ImageView) findViewById(R.id.image);
bit = Bitmap.createBitmap(300, 400, RGB_565);
for(int i = 0; i < 300; i++){
for(int j = 0; j < 400; j++)
bit.setPixel(i,j, Color.WHITE);
}
img.setImageBitmap(bit);
img.post(new Runnable() {
@Override
public void run() {
bit.setPixel(x, y, Color.BLACK);
img.setImageBitmap(bit);
if(++x < 300 && ++y < 400){
img.postDelayed(this, 100);
}
}
});