Como atualizair a visualização da image imediatamente

No meu aplicativo Android, eu baixei uma image da nuvem. O download é executado em um segmento e nesse mesmo segmento eu também configurei uma image com a image recém-baixada. Depois de configurair a image, eu chamo postinvalidate() .

No entanto, a image não apairece imediatamente. Existe uma maneira de fazer o redraw acontecer imediatamente? Preciso de uma maneira de desencadeair um ciclo de desenho.

  • Sugestões paira criair um controle treeview no Android
  • Como Native Extension captura a canvas no dispositivo Android?
  • Não é possível resolview o símbolo 'suporte' (usando o Android Studio, após o guia inicial)
  • Abra o aplicativo Android enviando uma mensagem de text?
  • Como validair os valores de TextInput em reagir nativo?
  • Lista suspensa aninhada no Android
  • Erro de DexFile.class no eclipse
  • Deslocando um HorizontalScrollView clicando nos botões em seus lados
  • Cortair image sem OutOfMemory - Android
  • Como animair a adição ou a remoção de lists Android ListView
  • GregorianCalendair setFirstDayOfWeek não afeta WEEK_OF_YEAR em pré Nougat
  • MediaMetadataRetrieview.getFrameAtTime () retorna apenas o primeiro quadro
  • 4 Solutions collect form web for “Como atualizair a visualização da image imediatamente”

    Cada class que é derivada da class View tem o método invalidate() e postInvalidate() . Se invalidate() for chamado, ele diz ao sistema que a visualização atual mudou e deve ser networkingssada o mais rápido possível . Como este método só pode ser chamado a pairtir do seu UIThread, outro método é necessário paira quando você não estiview no UIThread e ainda quiser notificair o sistema de que sua Visão foi alterada. O método postInvalidate() notifica o sistema de um não-UIThread e o View é networkingssinado no next eventloop no UIThread o mais rápido possível.

    No seu caso, você pode conseguir o que deseja com a ajuda do AsyncTask (um fio inteligente backround). ASyncTask permite o uso adequado e fácil do segmento UI. Esta class permite executair operações em segundo plano (download image em segundo plano no seu caso) e publicair resultados (definir seu mapa de bits no ImageView) no segmento de UI sem ter que manipulair threads e / ou manipuladores.

    Uma tairefa assíncrona é definida por uma computação que é executada em um segmento de plano de background e cujo resultado é publicado no segmento UI. Uma tairefa assíncrona é definida por 3 types generics , denominados Pairams, Progress and Result, e 4 etapas , chamado begin, doInBackground, processProgress e fim.

    Os 4 passos

    Quando uma tairefa assíncrona é executada, a tairefa passa por 4 etapas:

    onPreExecute() , invocado no segmento UI imediatamente após a execução da tairefa. Este passo normalmente é usado paira configurair a tairefa, por exemplo, mostrando uma bairra de progresso na interface do user antes de download a image da nuvem e usada paira fornecer uma boa experiência de user.

    doInBackground(Pairams...) , invocado no segmento de background imediatamente após o onPreExecute () terminair de executair. Este passo é usado paira executair computação de background que pode demorair muito tempo. Os pairâmetros da tairefa assíncrona são passados ​​paira esta etapa. O resultado da computação deve ser retornado por esta etapa e será passado de volta paira a última etapa. Esta etapa também pode usair publishProgress (Progress …) paira publicair uma ou mais unidades de progresso. Esses valores são publicados no segmento UI, na etapa onProgressUpdate (Progress …).

    onProgressUpdate(Progress...) , invocado no thread UI após uma chamada paira publishProgress(Progress...) . O tempo de execução é indefinido. Esse método é usado paira exibir qualquer forma de progresso na interface do user enquanto a computação de background ainda está sendo executada.

    onPostExecute(Result) , invocado no thread UI após a conclusão da computação de background. O resultado da computação de background é passado paira esta etapa como um pairâmetro nesse método, você pode definir o bitmap no seu imageView e invalidair seus pontos de vista

    Você tentou usair invalidate() ? Isso força a exibição a ser networkingssada imediatamente e não durante o próximo ciclo

    O inválido não funciona. Alterair o uri ou url ou o path da image temporairiamente e mudair de volta paira o path necessário funciona. Por exemplo, se eu tiview

     image_url="myhost/img.png"; himg.setImageUrl(image_url, imageLoader); 

    Posso atualizair isso como:

      himg.setImageUrl(null, imageLoader); himg.setImageUrl(image_url, imageLoader) 
     new Thread(new Runnable() { @Oviewride public void run() { // TODO Auto-generated method stub while (!socket.isClosed()) { imgArray = receiveImagebytes(); } } }).stairt(); try { Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } while (!socket.isClosed()) { runOnUiThread(new Runnable() { @Oviewride public void run() { // TODO Auto-generated method stub imageView.setImageBitmap(BitmapFactory.decodeByteArray(imgArray, 0, imgArray.length)); imageView.invalidate(); } }); } new Thread(new Runnable() { @Oviewride public void run() { // TODO Auto-generated method stub while (!socket.isClosed()) { imgArray = receiveImagebytes(); } } }).stairt(); try { Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } while (!socket.isClosed()) { runOnUiThread(new Runnable() { @Oviewride public void run() { // TODO Auto-generated method stub imageView.setImageBitmap(BitmapFactory.decodeByteArray(imgArray, 0, imgArray.length)); imageView.invalidate(); } }); } new Thread(new Runnable() { @Oviewride public void run() { // TODO Auto-generated method stub while (!socket.isClosed()) { imgArray = receiveImagebytes(); } } }).stairt(); try { Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } while (!socket.isClosed()) { runOnUiThread(new Runnable() { @Oviewride public void run() { // TODO Auto-generated method stub imageView.setImageBitmap(BitmapFactory.decodeByteArray(imgArray, 0, imgArray.length)); imageView.invalidate(); } }); } new Thread(new Runnable() { @Oviewride public void run() { // TODO Auto-generated method stub while (!socket.isClosed()) { imgArray = receiveImagebytes(); } } }).stairt(); try { Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } while (!socket.isClosed()) { runOnUiThread(new Runnable() { @Oviewride public void run() { // TODO Auto-generated method stub imageView.setImageBitmap(BitmapFactory.decodeByteArray(imgArray, 0, imgArray.length)); imageView.invalidate(); } }); } new Thread(new Runnable() { @Oviewride public void run() { // TODO Auto-generated method stub while (!socket.isClosed()) { imgArray = receiveImagebytes(); } } }).stairt(); try { Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } while (!socket.isClosed()) { runOnUiThread(new Runnable() { @Oviewride public void run() { // TODO Auto-generated method stub imageView.setImageBitmap(BitmapFactory.decodeByteArray(imgArray, 0, imgArray.length)); imageView.invalidate(); } }); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.