android ImageView不工作

时间:2017-03-22 11:26:32

标签: android

我想在设置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){

                    }
                }
            }
        });


    }
}

2 个答案:

答案 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);
                }
            }
        });