Gallery no Android, Entendendo e Utilizando

Receba em primeira mão, e com prioridade, os conteúdos Android exclusivos do Blog. Você receberá um email de confirmação. Somente depois de confirma-lo é que poderei lhe enviar os conteúdos exclusivos.

Email inválido.
Blog /Android /Gallery no Android, Entendendo e Utilizando

Gallery no Android, Entendendo e Utilizando

Vinícius Thiengo
(3594) (16)
Go-ahead
"Todas as coisas que eu fiz foram feitas sem eu ter dinheiro e também de não ter feito antes."
Steve Wozniak
Kotlin Android
Capa do livro Desenvolvedor Kotlin Android - Bibliotecas para o dia a dia
TítuloDesenvolvedor Kotlin Android - Bibliotecas para o dia a dia
CategoriasAndroid, Kotlin
AutorVinícius Thiengo
Edição
Capítulos19
Páginas1035
Acessar Livro
Treinamento Oficial
Android: Prototipagem Profissional de Aplicativos
CursoAndroid: Prototipagem Profissional de Aplicativos
CategoriaAndroid
InstrutorVinícius Thiengo
NívelTodos os níveis
Vídeo aulas186
PlataformaUdemy
Acessar Curso
Receitas Android
Capa do livro Receitas Para Desenvolvedores Android
TítuloReceitas Para Desenvolvedores Android
CategoriaDesenvolvimento Android
AutorVinícius Thiengo
Edição
Ano2017
Capítulos20
Páginas936
Acessar Livro
Código Limpo
Capa do livro Refatorando Para Programas Limpos
TítuloRefatorando Para Programas Limpos
CategoriaEngenharia de Software
AutorVinícius Thiengo
Edição
Capítulos46
Páginas599
Acessar Livro
Quer aprender a programar para Android? Acesse abaixo o curso gratuito no Blog.
Conteúdo Exclusivo
Receba em primeira mão, e com prioridade, os conteúdos Android exclusivos do Blog.
Email inválido

Opa! Blz?

Nesse vídeo mostro o componente visual Gallery do Android. Ele está depreciado devido a ineficiencia de seu script interno, porém pela simplicidade de uso e de implmentsção e por ainda ser permitido o seu uso eu achei útil mostra-lo aqui, pois para mim é a melhor maneira de se criar galerias rápidas e práticas nos nossos layouts Android. Fique atento quanto ao uso do LayoutParams, pois os elementos Gallery e internos ao Gallery têm de utilizar o Gallery.LayoutParams. Mas enfim, vou evitar mais delongas e deixar você assitir ao vídeo.

Abaixo o link do post (vídeo) que permiti você entender a implementação de uma classe que herda da classe BaseAdapter:

Utilizando BaseAdapter Para Personalização Completa da ListView

O link para download do projeto se encontra logo abaixo no post.

Página do componente Gallery no site oficial de desenvolvedores Android

Segue imagem esquema do componente visual Gallery:

Gallery no Android, Entendendo e Utilizando

Compartilhe, comente! Vlw

Receba em primeira mão, e com prioridade, os conteúdos Android exclusivos do Blog.
Email inválido

Relacionado

WebView no Android, Entendendo e UtilizandoWebView no Android, Entendendo e UtilizandoAndroid
Integrando WebView Android Com JavaScript de Uma WebPageIntegrando WebView Android Com JavaScript de Uma WebPageAndroid
Monitoramento de Inicio e Fim de Carregamento de Página no WebViewMonitoramento de Inicio e Fim de Carregamento de Página no WebViewAndroid
Otimizando Sua APP Android Com OnSaveInstanceStateOtimizando Sua APP Android Com OnSaveInstanceStateAndroid

Compartilhar

Comentários Facebook

Comentários Blog (16)

Para código / script, coloque entre [code] e [/code] para receber marcação especifica.
Forneça seu nome válido.
Forneça seu email válido.
Forneça o comentário.
Enviando, aguarde...
13/04/2017
Olá Thiengo, tudo bem?

Sei que estou sendo um tanto "incoveniente", mas estou correndo atrás de livros e apostilas para aprender e não ficar importunando tanto assim. Mas gostaria de finalizar esse app que peguei para criar.

Gostaria de agradecer você pela ajuda, consegui colocar a animação que queria (UFA! Finalmente!). O antigo código que enviei, estava meio confuso mesmo.

Só não entendi uma coisa. Antes de colocar a animação de fundo, aparecia um texto no meu app, depois que inseri a animação, não aparece mais esse texto. Na verdade era apenas uma palavra que aparecia quando era tocado no tela. Parece que a animação ficou tudo na frente, não apare aparecendo mais as palavras na tela.

O meu código java é esse:

...
public class MainActivity extends Activity {

private ImageButton ibMiado;
private TextView tvMiado;

@Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ImageView img = (ImageView)findViewById(R.id.animacao);
        img.setBackgroundResource(R.drawable.correndo);
        AnimationDrawable frameAnimation = (AnimationDrawable) img.getBackground();
        frameAnimation.start();


        ibMiado = (ImageButton)findViewById(R.id.imgBotao);
        tvMiado = (TextView)findViewById(R.id.tvMiado);
        tvMiado.setTextSize(16);

        TextView tv = (TextView) findViewById(R.id.tvMiado);
    
        ibMiado.setOnClickListener(new View.OnClickListener() {


    @Override
public void onClick(View v) {
tvMiado.setTextSize(30);
decidir();
}
});
     }

public void decidir(){
    TextView tv = (TextView) findViewById(R.id.tvMiado);

try {
int rndPhrase;
final Random rndNbr = Random();
switch (rndPhrase) {

case 1:
tvDecider.setText("Felix");
mPlayer = MediaPlayer.create(this, R.raw.f_miado);
break;


case 2:
tvDecider.setText("Tom");
mPlayer = MediaPlayer.create(this, R.raw.t_miado);
break;

...


No meu layout, utilizei a ferramenta tools:context, que ficou assim:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android "
    xmlns:customfontdemo="http://schemas.android.com/apk/res-auto "
    xmlns:tools="http://schemas.android.com/tools "
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.jardimiado.MainActivity">

    <ImageButton
        android:id="@+id/imgBotao"
        android:background="@android:color/transparent"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clickable="true"
        android:layout_gravity="center"
        android:contentDescription="@null"
        />

    <TextView
        android:id="@+id/tvMiado"
android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:textColor="#FF0000"
        android:text="@string/gatos"
        android:gravity="center"

        />
    <ImageView
        android:id="@+id/animacao"
        android:layout_width="match_parent"
        android:scaleType="fitCenter"
        android:layout_height="match_parent"
        />
</RelativeLayout>


Mais uma vez, agradeço pela ajuda!
Responder
Vinícius Thiengo (0) (0)
27/04/2017
Joana, tudo bem?

Utilize o FrameLayout como layout root do layout de sua MainActivity. Hoje você está utilizando o RelativeLayout.

Antes de somente alterar para FrameLayout, veja o vídeo do link a seguir, pois assim você vai entender como trabalhar com essa View: http://www.thiengo.com.br/entendendo-e-utilizando-framelayout-no-android

Assim que entender, posicione as Views corretamente e terá o texto sendo apresentado sempre que necessário.

Com o RelativeLayout também é possível fazer isso, mas o entendimento é um pouco menos trivial que quando com o FrameLayout.

Depois informe aqui se conseguiu. Abraço.
Responder
09/04/2017
Thiengo, boa tarde,

Desculpe por tantas perguntas, é que realmente estou começando no mundo android. E o seu site é o melhor que encontrei para tirar minhas dúvidas, pois você realmente responde com exatidão quando faço algumas perguntas. Estou há dias tentando encontrar um jeito para esse código e você está me ajudando bastante;

Agora sim estou "quase finalizando" o meu aplicativo. O meu aplicativo é um jardim onde o usuário quando clica na tela, toca o som de um miado de gato (3 sons diferentes) e como background aparece um felino correndo.

Quando fiz as modificações que você me passou, o fundo animado finalmente apareceu, mas quando é tocado na tela, não toca mais o som. E quando retiro o fundo animado e toca na tela, o som toca normalmente. No layout, usei o "framelayout"


Só falta isso para finalizar: a animação de fundo do gato correndo e quando toca o dedo na tela, ativa o áudio de miado.

Esse é como o código ficou depois que modifiquei com sua ajuda e passarei o codigo do layout também:


public class MainActivity extends Activity {
    /** Called when the activity is first created. */


private ImageButton ibFelinos;
private TextView tvDecider;
private AnimationDrawable felino;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        }


ImageView felinoImage = new ImageView(this);
felinoImage.setBackgroundResource(R.drawable.correndo);
felino = (AnimationDrawable) felinoImage.getBackground();
setContentView(felinoImage);

felino.start(); return;
    }



        ibDecider = (ImageButton)findViewById(R.id.imgBotao);
        tvDecider = (TextView)findViewById(R.id.tvDecider);
                
        TextView tv = (TextView) findViewById(R.id.tvDecider);
            
}
      
    }

public void decidir(){
    TextView tv = (TextView) findViewById(R.id.tvDecider);

final Random rndNbr = Random();
switch (rndPhrase) {


case 1:
tvDecider.setText("Felix");
mPlayer = MediaPlayer.create(this, R.raw.f_miado);
         break;


case 2:
tvDecider.setText("Tom");
mPlayer = MediaPlayer.create(this, R.raw.t_miado);
break;


case 3:
tvDecider.setText("Siames");
mPlayer = MediaPlayer.create(this, R.raw.s_miado);
break;
}
    
    }
}




ESSE É O LAYOUT:


<?xml version="1.0" encoding="utf-8"?>

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android "
    xmlns:customfontdemo="http://schemas.android.com/apk/res-auto "
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="@drawable/correndo">
  
  
    <ImageButton
        android:id="@+id/imgBotao"
        android:background="@android:color/transparent"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true"
        android:layout_gravity="center"
        android:contentDescription="@null"
    />
    
    <TextView
        android:id="@+id/tvDecider"
android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
    />
      
        
</FrameLayout>
Responder
Vinícius Thiengo (0) (0)
13/04/2017
Joana, tudo bem?

Não consegui entender seu código, nem mesmo encontrei o método que responde aos cliques em tela.

Se possível, coloque-o bem formatado no PasteBin (https://pastebin.com/ ) e então compartilhe o link dele aqui. Com o código lá fica tranquilo de entender, pois eles formatam como código em um IDE. Abraço.
Responder
08/04/2017
Thiengo, td bem?

Aqui está o código que aparece a mensagem "Multiple markers at this line
- overrides android.app.Activity.onCreate
- Duplicate method onCreate(Bundle) in type MainActivity":

Quando sigo as instruções do Eclipse e retiro o @Override e renomeio para "public void onCreate1 (Bundle savedinstanceState)" perde todo o efeito.


package com.zoo;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import java.util.ArrayList;
import java.util.Random;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.graphics.Typeface;
import android.graphics.drawable.AnimationDrawable;
import android.content.Intent;

@SuppressLint("CutPasteId")



public class MainActivity extends Activity {
    /** Called when the activity is first created. */



private AnimationDrawable felino;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ImageView felinoImage = new ImageView(this);
felinoImage.setBackgroundResource(R.drawable.correndo);
felino = (AnimationDrawable) felinoImage.getBackground();
setContentView(felinoImage);

}


private ImageButton ibFelinos;
private TextView tvDecider;




    @Override
    public void onCreate(Bundle savedInstanceState) {
        
        
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        ibDecider = (ImageButton)findViewById(R.id.imgBotao);
        tvDecider = (TextView)findViewById(R.id.tvDecider);
        tvDecider.setTextSize(23);
        
        TextView tv = (TextView) findViewById(R.id.tvDecider);
      
      
}
      
    }
    
  

Tem outro jeito de consertar esse código do que renomear o onCreate e retirar o @Override?
Responder
Vinícius Thiengo (0) (0)
09/04/2017
Joana, o @Override é apenas uma annotation que indica que você está sobrescrevendo um método da classe pai, em seu caso a classe pai é a classe Activity.

O problema que vejo em seu código é que há dois métodos onCreate(). Tem que haver apenas um, digo, os dois têm a mesma assinatura. Você tem que colocar todo o código de seus onCreate() em apenas um deles e com a seguinte assinatura:

@Override
protected void onCreate(Bundle savedInstanceState){
        /* RESTANTE DO CÓDIGO AQUI */
}

Assim seu projeto deve funcionar.

Mesmo assim, antes de tentar a correção, veja o vídeo do link a seguir para entender mais sobre o que está acontecendo de errado em seu código: http://www.thiengo.com.br/ciclo-de-vida-de-uma-atividade-no-android

Abraço.
Responder
04/04/2017
Olá Thiengo, tudo bem?

Agradeço pela ajuda, consegui fazer o que queria, mas ocorreu um erro que não estou conseguindo solucionar e, novamente, pedirei a sua ajuda.

Resolvi criar um novo projeto android no eclipse para ter apenas essas imagens mudando, quando consegui, transferi o código para o meu aplicativo que estou quase finalizando e apresentou o seguinte erro:

"Multiple markers at this line
- overrides android.app.Activity.onCreate
- Duplicate method onCreate(Bundle) in type MainActivity"

Quando sigo as recomendações do Eclipse (como renomear onCreate, depois deletar "@Override", etc...) esse meu código perde todo o efeito e quando mantenho esse meu novo código (sem alterar nada) e faço as modificações no código que já estava funcionando, o meu novo código (de mudar as imagens no background") funciona perfeito e o que alterei fica inoperante.

Tem como resolver isso? Estou iniciando no android e ainda tenho muitas dificuldades, mas aos poucos estou aprendendo.

Agradeço pela sua ajuda!
Responder
Vinícius Thiengo (0) (0)
08/04/2017
Joana, fiquei na dúvida sobre o problema do onCreate().

Se possível, coloque no PasteBin (https://pastebin.com/ ) esse seu código com problema e compartilhe o link aqui. Sinalize nele o método que deveria estar funcionando e não está. Abraço.
Responder
27/03/2017
Thiengo, boa tarde.

pode me dar um help numa aplicação aqui que não estou conseguindo fazer? estou quase finalizando um app aqui, mas quero que a imagem de fundo (background) mude sempre que o aplicativo é iniciado. Por exemplo, quando o aplicativo é iniciado, a imagem de fundo seria um cachorro, caso o usuário inicie novamente o aplicatido, a imagem de fundo já mudaria, ao invés de aparecer o cachorro, a imagem de fundo mudaria para um gato. Tenho 10 imagens de fundo que gostaria que fosse mudado sempre que o apçlicativo é iniciado.


Criei uma imageview no layout e configurei o id android:id="@+id/imgRandom", depois inseri esse código, mas nada funcionou:


<code>

final Random rnd = new Random();

    @Override
    protected void onCreate(
        final Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.rnd_images);

        final ImageView img = (ImageView) findViewById(R.id.imgRandom);
        
        final String str = "img_" + rnd.nextInt(2);
        img.setImageDrawable
        (
            getResources().getDrawable(getResourceID(str, "drawable",
                getApplicationContext()))
            );
    }

    protected final static int getResourceID
    (final String resName, final String resType, final Context ctx)
    {
        final int ResourceID =
            ctx.getResources().getIdentifier(resName, resType,
                ctx.getApplicationInfo().packageName);
        if (ResourceID == 0)
        {
            throw new IllegalArgumentException
            (
                "No resource string found with name " + resName
                );
        }
        else
        {
            return ResourceID;
        }
    }
}

</code>

Você teria como me ajudar como faço para que a imagem background random funcione?
Responder
Vinícius Thiengo (0) (0)
01/04/2017
Joana, tudo bem?

Para esse efeito de mudança de imagem em background você não precisa de um ImageView, pode alterar o background do View root do layout.

Primeiro, certifique-se de ter ao menos quatro versões de cada imagem de background de seu App. Uma para cada folder: drawable-mdpi, drawable-hdpi, drawable-xhdpi e drawable-xxhdpi.

Veja as medições no link a seguir: http://stackoverflow.com/a/13228830/2578331

Depois, para apresentar uma imagem em background, utilize o código a seguir:

ViewGroup vg = (ViewGroup) findViewById( R.id.identificador_do_view_que_tera_um_novo_bg );
vg.setBackgroundResource( R.drawable.nome_imagem );

Para saber qual imagem apresentar, você pode utilizar um algoritmo junto ao SharedPreferences para saber qual imagem ainda não foi apresentada e então mostra-la como background.

Quando todas as imagens estiverem com a mesma quantidade de apresentações como background, inicie o ciclo novamente.

Você precisa persistir a quantidade de vezes que as imagens foram apresentadas caso queira que todas sejam mostradas.

Se não conhece o SharedPreferences, veja o artigo / vídeo a seguir: http://www.thiengo.com.br/sharedpreferences-no-android-entendendo-e-utilizando

Caso não tenha problema em apresentar uma mesma imagem mais vezes do que outras, então mantenha o trabalho com seu algoritmo randômico. Mas utilize o script de alteração de background que coloquei no início da resposta.

Abraço.
Responder
13/08/2015
Oi Thiengo, como implementar de forma que ele busque as imagens via web?
Responder
Vinícius Thiengo (0) (0)
14/08/2015
Escolhendo uma lib de acordo com o comentário que fiz abaixo, vc pode utilizar a lib Fresco para carregamento de imagens da Web, é mesma lib que o Facebook utiliza nas APPs dele, veja esse vídeo sobre ela (http://www.thiengo.com.br/lib-fresco-para-carregamento-de-imagens-com-gifs-e-webps-animados-material-design-android-parte-12 ). Abraço
Responder
13/08/2015
Oi Thiengo, que outra implementação substitui o gallery, uma vez que ele já está depreciado?
Responder
Vinícius Thiengo (0) (0)
14/08/2015
Fala Ilton, blz?
Tente o ImageSwitch (http://www.thiengo.com.br/imageswitcher-no-android-entendendo-e-utilizando ) ou algumas dessas libs de Gallery no Android (https://android-arsenal.com/search?q=gallery ). Abraço
Responder
claudineiarteman (0) (0)
03/10/2014
Thiengo, como fa?o para habilitar o zoom no gallery?? obrigado claudinei
Responder
Vinícius Thiengo (0) (0)
03/10/2014
Fala Claudinei, blz?
Não implementei ainda zoom na Gallery, mas tb não aconselho vc a utiliza-la, pois ela na época que fiz o vídeo já estava depreciada... de qualquer forma encontrei essa lib que pode lhe ajudar (https://github.com/davemorrissey/subsampling-scale-image-view ) Abraço
Responder