2017-03-22 20 views
0

Bitmapクラスのピクセルを設定するたびにImageViewを更新します。 ImageViewは機能しません。私はすでにuiスレッドを使用しています。私は何をすべきか? これは私のコードです。android ImageViewが動作しません。

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

なぜTRUEを使用しますか? – oskarko

+0

'runOnUiThread()'メソッドの代わりに 'ImageView.post()'メソッドを使用する –

+0

@oskarkl私は連続的に変更したい。 –

答えて

0

ImageView.post()メソッドにpostDelayedを使用します。私はこれを私のマシンでやった。加えて、ピクセルが終了したら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); 
       } 
      } 
     }); 
0

Handlerを使用して表示を更新してください。

img.post(new Runnable() { 
      @Override 
      public void run() { 

      } 
     }); 
+0

私は自分のコードを変更img.post。しかし、それは動作しません –

関連する問題