Trabalhando com a classe AssetManager

Introdução

Parecido com o ideal do uso de uma instância da classe Resources, um objeto AssetManager é usado para capturar e carregar em tempo de execução itens da pasta assets, enquanto o objeto Resources faz o mesmo com itens da pasta resources.

Outra semelhança entre os dois é a forma de capturar, enquanto capturarmos um objeto de Resources em nossa Activity através do método getResources() herdado da classe ContentWrapper, temos o método getAssets() herdado da mesma classe pela Activity que nos retornará um objeto AssetManager.
Sendo assim, vamos elaborar um exemplo da captura de um objeto AssetManager.


 class MyActivity extends Activity {  
      @Override  
      public void onCreate(Bundle bundle) {  
           super.onCreate(bundle);  
           setContentView(R.layout.main);  
           AssetManager assets = getAssets();  
      }  
 }  


Carregando uma imagem

Geralmente, dentro da pasta assets inserimos imagens para serem usadas dentro de nosso app. Associá-la a um ImagemView de dentro do xml é simples, como segue abaixo

 <LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”  
      android:id=“@+id/main”  
      android:layout_width=“match_parent”  
      android:layout_height=“match_parent”  
      android:layout_orientation= “vertical” >  
      <ImageView android:layout_width=“wrap_content”  
           android:layout_height=“wrap_content”  
           android:id=“@+id/myImage”  
           android:src=“@drawable/myImage”/>  
 </LinearLayout>  



Mas e se precisássemos fazer tudo isso em tempo de execução, ou seja, e se precisamos fazer isso de dentro de uma activity? Para isso temos o nosso objeto AssetManager e seu método open(String) que aguarda como parâmetro o caminho de onde está a imagem à partir da pasta asset. Vamos imaginar que nossa imagem está na pasta “assets/smallimages/MyImage”, que na verdade só indicaremos à partir da pasta asset, e ao passarmos ela ao método, ele retornará um objeto InputStream como pode ser visto no exemplo abaixo.
 class MyActivity extends Activity {  
      @Override  
      public void onCreate(Bundle bundle) {  
           super.onCreate(bundle);  
           setContentView(R.layout.main);  
           AssetManager assets = getAssets();  
           InputStream inputStream;  
           try {  
                inputStream = assets.open(“smallimages/MyImage.png”);  
           } catch (IOException e) {  
                Log.e(“ERROR”, “Error loading the imagem”, e);  
           }  
      }  
 }  


Feito isso, precisamos agora transformar esse Stream em um Drawable através do método estático da classe Drawable, createFromStream(Stream, String). Passaremos a esse método nosso objeto InputStream e como segundo parâmetro um nome.
 class MyActivity extends Activity {  
      @Override  
      public void onCreate(Bundle bundle) {  
           super.onCreate(bundle);  
           setContentView(R.layout.main);  
            AssetManager assets = getAssets();  
           InputStream inputStream;  
           try {  
                inputStream = assets(“smallimages/MyImage.png”);  
                Drawable drawable = Drawable.createFromStream(inputStream);  
           } catch (IOException e) {  
                Log.e(“ERROR”, “Error loading the imagem”, e);  
           }  
      }  
 }  
Então, para finalizar passamos esse objeto drawable ao método setImageDrawable(Drawable) do nosso objeto ImageView que referencia ao nosso elemento no xml.
 class MyActivity extends Activity {  
      @Override  
      public void onCreate(Bundle bundle) {  
           super.onCreate(bundle);  
           setContentView(R.layout.main);  
            AssetManager assets = getAssets();  
           InputStream inputStream;  
           try {  
                inputStream = assets(“smallimages/MyImage.png”);  
                Drawable drawable = Drawable.createFromStream(inputStream);  
                ImageView imageView = (ImageView) findViewById(R.id.myImage);  
                imageView.setImageDrawable(drawable);  
           } catch (IOException e) {  
                Log.e(“ERROR”, “Error loading the imagem”, e);  
           }  
      }  

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s