Existe uma maneira comum de mostrar uma imagem grande e permitir que o usuário aumente ou diminua o zoom e faça a panorâmica da imagem?
Até agora encontrei duas maneiras:
- substituir o ImageView, isso parece um pouco demais para um problema tão comum.
- usando uma visualização na web, mas com menos controle sobre o layout geral etc.
Respostas:
ATUALIZAR
Acabei de dar uma nova atualização ao TouchImageView. Agora, ele inclui zoom duplo e arremesso, além de zoom panorâmico e beliscão. O código abaixo é muito antigo. Você pode conferir o projeto github para obter o código mais recente.
USO
Coloque TouchImageView.java no seu projeto. Em seguida, pode ser usado da mesma forma que o ImageView. Exemplo:
Se você estiver usando o TouchImageView no xml, deverá fornecer o nome completo do pacote, porque é uma exibição personalizada. Exemplo:
Nota: removi minha resposta anterior, que incluía um código muito antigo e agora vincula diretamente ao código mais atualizado no github.
ViewPager
Se você estiver interessado em colocar o TouchImageView em um ViewPager, consulte esta resposta.
fonte
TouchImageView(Context context, AttributeSet attrs)
e chamesuper(context, attrs);
Isso ocorre porque quando você aumenta a exibição personalizada, ela é construída com dois parâmetros, em vez de apenas um. Quando eu chegar lá, corrigirei o TouchImageView para dar suporte aos três construtores e desenhistas de exibição.<com.example.TouchImageView android:id="@+id/img" />
. Você fez isso?Adaptei alguns códigos para criar um TouchImageView que suporta multitoque (> 2.1). É inspirado no livro Olá, Android! (3ª edição)
Está contido nos 3 arquivos a seguir TouchImageView.java WrapMotionEvent.java EclairMotionEvent.java
TouchImageView.java
WrapMotionEvent.java
EclairMotionEvent.java
fonte
WrapMotionEvent
eEclairMotionEvent
... enfim, +1.Usei um WebView e carreguei a imagem da memória via
O WebView lida com todo o zoom panorâmico e rolagem. Se você usar wrap_content, a visualização na web não será maior, em seguida, a imagem e nenhuma área em branco serão mostradas. O WebView é o melhor ImageView;)
fonte
Em resposta à pergunta original de Janusz, existem várias maneiras de conseguir isso, as quais variam em seu nível de dificuldade e foram descritas abaixo. O uso de uma visualização na Web é bom, mas é muito limitado em termos de aparência e controle. Se você estiver desenhando um bitmap a partir de uma tela, as soluções mais versáteis propostas serão as de MikeOrtiz, Robert Foss e / ou o que Jacob Nordfalk sugeriu. Há um ótimo exemplo para incorporar o android-multitouch-controller por PaulBourke e é ótimo por ter o suporte multi-touch e todos os tipos de visualizações personalizadas.
Pessoalmente, se você está simplesmente desenhando uma tela em um bitmap e, em seguida, exibindo-a no interior e no ImageView e deseja poder ampliar e se movimentar usando o multitoque, acho a solução de MikeOrtiz a mais fácil. No entanto, para meus propósitos, o código do Git que ele forneceu parece funcionar apenas quando a classe ImageView personalizada do TouchImageView é o único filho ou fornece os parâmetros de layout como:
Infelizmente, devido ao meu design de layout, eu precisava de "wrap_content" para "layout_height". Quando mudei para isso, a imagem foi cortada na parte inferior e não pude rolar ou aplicar zoom na região cortada. Então, dei uma olhada no Source for ImageView apenas para ver como o Android implementou o "onMeasure" e mudei o de MikeOrtiz para se adequar.
Aqui resolveSize (int, int) é um "Utilitário para reconciliar um tamanho desejado com restrições impostas por um MeasureSpec, em que:
Parâmetros:
Devoluções:
Então, essencialmente, fornecendo um comportamento um pouco mais semelhante à classe ImageView original quando a imagem é carregada. Mais algumas alterações podem ser feitas para oferecer suporte a uma variedade maior de telas que modificam a proporção. Mas, por enquanto, espero que isso ajude. Obrigado a MikeOrtiz por seu código original, ótimo trabalho.
fonte
Você também pode experimentar http://code.google.com/p/android-multitouch-controller/
A biblioteca é realmente ótima, embora inicialmente um pouco difícil de entender.
fonte
Acabei de integrar o TouchImageView de Robert Foss: ele funcionou perfeitamente fora da caixa! Obrigado!
Eu apenas modifiquei um pouco o código para poder instancia-lo no meu layout.xml.
Basta adicionar dois construtores
e transforme o construtor antigo em um método init:
fonte
@ Robert Foss, @Mike Ortiz, muito obrigado pelo seu trabalho. Mesclei seu trabalho e concluí as aulas de Robert para o Android> 2.0 com o trabalho adicional de Mike.
Como resultado do meu trabalho, apresento o Android Touch Gallery, baseado no ViewPager e usado o TouchImageView modificado. Imagens sendo carregadas por URL e você pode ampliar e arrastá-las. Você pode encontrá-lo aqui https://github.com/Dreddik/AndroidTouchGallery
fonte
Tente usar
ZoomView
para ampliar qualquer outra visualização.http://code.google.com/p/android-zoom-view/ é fácil, gratuito e divertido de usar!
fonte
Adicionando a resposta de @ Mike. Eu também precisei tocar duas vezes para restaurar a imagem para as dimensões originais quando visualizada pela primeira vez. Então, adicionei um monte de variáveis de instância "orig ..." e adicionei o SimpleOnGestureListener, que fez o truque.
fonte
Esta é uma adição muito tardia a esta discussão, mas estou trabalhando em uma exibição de imagem que suporta zoom e pan e possui alguns recursos que não encontrei em nenhum outro lugar. Isso começou como uma maneira de exibir imagens muito grandes sem causar
OutOfMemoryError
s, subamostrando a imagem quando diminuiu o zoom e carregando blocos de alta resolução quando ampliados. Agora, ele suporta o uso em umaViewPager
rotação manualmente ou usando informações EXIF (paradas de 90 °), substituir os eventos de toque selecionados usandoOnClickListener
ou o seu próprioGestureDetector
ouOnTouchListener
, subclassificando para adicionar sobreposições, movimento panorâmico durante o zoom e movimento momentâneo.Não pretende ser um substituto de uso geral para
ImageView
isso não a estende e não suporta a exibição de imagens de recursos, apenas ativos e arquivos externos. Requer SDK 10.A fonte está no GitHub, e há um exemplo que ilustra o uso em um
ViewPager
.https://github.com/davemorrissey/subsampling-scale-image-view
fonte
Você pode tentar usar o LayoutParams para este
ZoomIn = zoom (verdadeiro); ZoomOut = zoom (falso);
fonte
A pasta drawable deve ter um arquivo de imagem bticn. funciona perfeitamente :)
fonte
Algo como abaixo fará isso.
Para visualizar o programa completo, clique aqui: Programa para ampliar a imagem no android
fonte