ti-enxame.com

Como implementar o efeito de zoom para visualização de imagem no android?

Eu tenho que implementar zoom de imagem, eu tentei com tantos códigos.Mas eu não tenho idéia completa de eventos de gesto. Eu quero implementar quando aplicamos toque duplo, a imagem será zoom de acordo com o lugar de toque (evento xey). Eu tenho que implementar apenas zoom neste momento sem pan.Can todo o corpo me sugere?

Edit: Na verdade, eu tenho implementado esse visualizador com imagens, se eu tentar aplicar pan e efeito de zoom, às vezes as imagens serão alteradas .Eu quero implementar o efeito de zoom para onde o usuário é clicado.

Me dê uma ideia disso ....

53
Android Developer World

Homem preguiçoso pode usar this lib , Basta importar dentro do seu projeto e

ImageView mImageView;
PhotoViewAttacher mAttacher;

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

    // Any implementation of ImageView can be used!
    mImageView = (ImageView) findViewById(R.id.iv_photo);

    // Set the Drawable displayed
    Drawable bitmap = getResources().getDrawable(R.drawable.wallpaper);
    mImageView.setImageDrawable(bitmap);

    // Attach a PhotoViewAttacher, which takes care of all of the zooming functionality.
    mAttacher = new PhotoViewAttacher(mImageView);
}


// If you later call mImageView.setImageDrawable/setImageBitmap/setImageResource/etc then you just need to call
mAttacher.update();
58
star18bit

Aqui é uma das formas mais eficientes, funciona sem problemas:

https://github.com/MikeOrtiz/TouchImageView

Coloque TouchImageView.Java no seu projeto. Ele pode então ser usado da mesma forma que ImageView.

Exemplo:

TouchImageView img = (TouchImageView) findViewById(R.id.img);

Se você estiver usando TouchImageView em xml, deverá fornecer o nome completo do pacote, porque é uma visualização customizada.

Exemplo:

    <com.example.touch.TouchImageView
            Android:id="@+id/img”
            Android:layout_width="match_parent"
            Android:layout_height="match_parent" />
53
Victor

Aqui está um ótimo exemplo de como implementar o efeito de zoom no toque com uma imageview

efeito de zoom no imageview

EDITAR:

Também aqui está outro grande.

Aperte para ampliar o tutorial

10
coder_For_Life22

Eu espero que você esteja indo bem. Muitas vezes acontece com todos quando eles querem adicionar novas funcionalidades em seu aplicativo, então normalmente eles procuram por bibliotecas que não são boas táticas porque você não sabe que tipo de código está naquela biblioteca. então eu sempre prefiro bifurcar as bibliotecas e adicionar as classes e métodos úteis no código do meu aplicativo.

então, quando eu me deparo com o mesmo problema, eu faço muito mais R & D, então eu acho uma classe que dá a habilidade de zoomIn, zoomOut e pinIn e out. então você pode ver essa classe aqui. .

então, como eu disse antes, é uma aula única. assim você pode colocar esta classe em qualquer lugar em seus projetos como pasta utils e colocar abaixo as linhas em seus arquivos XML como:

<your_packege_name.TouchImageView
        Android:id="@+id/frag_imageview"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:scaleType="fitCenter"
        Android:src="@drawable/default_flag"
        Android:transitionName="@string/transition_name_phone" /> 

e você pode encontrar essa visualização de imagem em sua atividade respeitada, como você fez para todas as visualizações como:

TouchImageView tv=(TouchImageView)findViewById(R.id.frag_imageview); 
tv.setImageResource(R.drawable.ic_play);

é isso para TouchImageView. aproveite nosso código :)

9
John smith

Este é, de fato, o melhor exemplo de Zoom de Imagem e Pan no Android,

http://blog.sephiroth.it/2011/04/04/imageview-zoom-and-scroll/

5
Sujit

Abaixo está o código para a classe ImageFullViewActivity

 public class ImageFullViewActivity extends AppCompatActivity {

        private ScaleGestureDetector mScaleGestureDetector;
        private float mScaleFactor = 1.0f;
        private ImageView mImageView;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.image_fullview);

            mImageView = (ImageView) findViewById(R.id.imageView);
            mScaleGestureDetector = new ScaleGestureDetector(this, new ScaleListener());

        }

        @Override
        public boolean onTouchEvent(MotionEvent motionEvent) {
            mScaleGestureDetector.onTouchEvent(motionEvent);
            return true;
        }

        private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
            @Override
            public boolean onScale(ScaleGestureDetector scaleGestureDetector) {
                mScaleFactor *= scaleGestureDetector.getScaleFactor();
                mScaleFactor = Math.max(0.1f,
                        Math.min(mScaleFactor, 10.0f));
                mImageView.setScaleX(mScaleFactor);
                mImageView.setScaleY(mScaleFactor);
                return true;
            }
        }
    }
2
Efi G

Eu preferi a biblioteca davemorrissey/subsampling-scale-image-view sobre chrisbanes/PhotoView ( resposta de star18bit)

  • Ambos são projetos ativos (ambos possuem alguns commits em 2015)
  • Ambos têm uma demonstração na PlayStore
  • subsampling-scale-image-view suporta imagens grandes (acima de 1080p) sem exceção de memória devido a sub amostragem, que PhotoView não suporta
  • subsampling-scale-image-view parece ter maior API e melhor documentação

Veja Como converter AAR para JAR , se você gosta de usar subamostragem-scale-image-view com o Eclipse/ADT

2
OneWorld

Você pode verificar a resposta em uma questão relacionada. https://stackoverflow.com/a/16894324/1465756

Apenas importar biblioteca https://github.com/jasonpolites/gesture-imageview .

no seu projeto e adicione o seguinte no seu arquivo de layout:

<LinearLayout
   xmlns:Android="http://schemas.Android.com/apk/res/Android"
   xmlns:gesture-image="http://schemas.polites.com/Android"
   Android:layout_width="fill_parent"
   Android:layout_height="fill_parent">

<com.polites.Android.GestureImageView
   Android:id="@+id/image"
   Android:layout_width="fill_parent"
   Android:layout_height="wrap_content"
   Android:src="@drawable/image"
   gesture-image:min-scale="0.1"
   gesture-image:max-scale="10.0"
   gesture-image:strict="false"/>`
2
arniotaki