Eu tenho uma imagem externa tipo: www.google.com.br/3748449.png
E quero mostrar em uma web view pois a mesma está associada a um cadastro interno
Isso é possível é isso é uma boa prática?
Eu tenho uma imagem externa tipo: www.google.com.br/3748449.png
E quero mostrar em uma web view pois a mesma está associada a um cadastro interno
Isso é possível é isso é uma boa prática?
Olá Gabriel, tudo bem?
Uma das formas mais fácil de carregar uma imagem baseada em uma URL é por meio de libs que facilitam esse processamento, como é o caso do Glide ou Picasso.
Farei uma demonstração com o Glide, o código ficaria da seguinte maneira:
ImageView imageView = (ImageView) findViewById(R.id.my_image_view);
Glide.with(this).load("http://www.google.com.br/3748449.png").into(imageView);
Veja que você pega uma referência de uma ImageView
, e então, atribui pra ela o tratamento que o Glide faz, de fato é bem fácil. O único detalhe é que precisa adicioná-lo como dependência... Se fosse usar o Picasso, também precisaria adicioná-lo como dependência.
Sobre a WebView
no desenvolvimento de Apps nativas não é recomendado e é considerado uma má prática sim... Então o que você pode pensar agora é: "Mas e se uma App que já exista faz uso de WebView
?". Aí de fato vai ter que ter paciência e dar uma pesquisada para ver como resolver... Particularmente eu não conheço muito de WebView, pois está sendo deixada pra trás cada vez mais.
Espero ter ajudado. Abraços.
Obrigado
A justificativa do uso dá webview seria para carregar a imagem apenas
Vou entrar esse método Obrigado
Gabriel, lembrando que se tudo der certo, lembre de marcar como solução, tudo bem? ;)
Até trouxe a imagem, porém demora demais para carregar
Tem como reduzir a imagem? Isso resolve? Pois as imagens que tenho que acessar são de tamanho grande e de alta qualidade, mas meu interesse é só mostrar 100% dentro do container da tela
Oi Gabriel, sobre a demora para trazer a imagem pode ser devido ao tamanho da imagem, pois de fato ela será baixada, logo, se for uma imagem grande demorará mais tempo...
Para solucionar o probrema de recarregar você pode usar o método .skipMemoryCache()
enviando um true
como parâmetro. Pegando como base o exemplo que passei, ficaria da seguinte forma:
Glide.with(this)
.load("http://www.google.com.br/3748449.png")
.skipMemoryCache(true)
.into(imageView);
Esse método mantém a imagem carregada em cache da memória, portanto, vai só demorar na primeira vez.
Agora o preenchimento da tela, existem alguns métodos que podem auxiliá-lo. Como por exemplo o override()
que permite editar o width e height que a imagem terá dentro do container (ImageView) junto com o centerCrop()
ou fitCenter()
, de fato precisa ficar testando pois vai depender muito do seu container, por exemplo:
Glide.with(this)
.load("http://www.google.com.br/3748449.png")
.skipMemoryCache(true)
.override(1300, 700)
.centerCrop()
.into(imageView);
Era basicamente isso que você precisava?
Acho que seria legal colocar um componente de espera para o loading como exemplo um progresso bar
Tem como fazer isso até que a imagem seja carregada?
Tem sim, da pra você adicionar um por meio do XML mesmo, vou deixar um exemplo abaixo:
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="200dp">
<ProgressBar
android:layout_width="match_parent"
android:layout_height="200dp"
android:visibility="visible"/>
<ImageView
android:id="@+id/item_image"
android:layout_width="match_parent"
android:layout_height="200dp" />
</RelativeLayout>
Aí na Activity, pode ser no onCreate mesmo, você faria o seguinte código:
ImageView imageView = (ImageView) findViewById(R.id.item_image);
Glide.with(this)
.load("http://www.google.com.br/3748449.png")
.override(1300, 700)
.skipMemoryCache(true)
.centerCrop()
.into(imageView);
Esse é um modo mais fácil de se fazer um progress para carregar uma imagem com o Glide.
Valeu