web-dev-qa-db-fra.com

Comment mettre en œuvre l'effet de zoom pour la vue de l'image dans Android?

Je dois implémenter le zoom d’image, j’ai essayé avec autant de codes. Mais je n’ai pas eu une idée complète des événements gestuels. Je veux implémenter lorsque nous appliquons un double tap, l'image sera agrandie en fonction de l'endroit du toucher (événement x et y). Je ne dois implémenter que le zoom à cette heure, pas de panoramique. Est-ce que tout le corps peut me suggérer?

Edit: En fait, j’ai implémenté ce viewflipper avec des images; si j’essaie d’appliquer un effet de panoramique et de zoom, il arrive que les images soient modifiées .Je souhaite implémenter un effet de zoom lorsque l’utilisateur est cliqué.

Donnez-moi une idée de ça ...

53

L'homme paresseux peut utiliser this lib , importez simplement à l'intérieur de votre projet et

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();
59
star18bit

Voici l'un des moyens les plus efficaces, cela fonctionne bien:

https://github.com/MikeOrtiz/TouchImageView

Endroit TouchImageView.Java dans votre projet. Il peut alors être utilisé de la même manière que ImageView.

Exemple:

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

Si vous utilisez TouchImageView dans un fichier xml, vous devez fournir le nom complet du package car il s'agit d'une vue personnalisée.

Exemple:

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

J'espère que vous allez bien. Cela arrive souvent quand ils veulent ajouter de nouvelles fonctionnalités à votre application, puis, normalement, ils recherchent tous des bibliothèques qui ne sont pas une bonne tactique, car vous ne savez pas quel type de code est contenu dans cette bibliothèque. Je préfère donc toujours bifurquer les bibliothèques et ajouter les classes et méthodes utiles dans le code de mon application.

alors, quand je suis coincé avec le même problème, je fais beaucoup de R & D, alors je trouve une classe qui donne la possibilité de faire un zoom avant, un zoom arrière et un pinIn and out. afin que vous puissiez voir cette classe ici. .

comme je l'ai déjà dit, c'est une classe unique. afin que vous puissiez mettre cette classe n'importe où dans vos projets comme le dossier utils . et mettre des lignes ci-dessous dans vos fichiers XML comme:

<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" /> 

et vous pouvez trouver cette image dans votre activité respectée, comme vous l'avez fait pour toutes les vues telles que -:

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

c'est tout pour TouchImageView. profitez de notre code :)

10
John smith

moyen très simple (testé): -

PhotoViewAttacher pAttacher;
pAttacher = new PhotoViewAttacher(Your_Image_View);
pAttacher.update();

Ajouter la ligne ci-dessous dans build.gradle: -

compile 'com.commit451:PhotoView:1.2.4'
10

Voici un excellent exemple sur la façon de mettre en œuvre un effet de zoom sur le toucher avec une image view

effet de zoom sur imageview

MODIFIER:

Aussi voici un autre excellent.

tutoriel pincer pour zoomer

10
coder_For_Life22

C’est en fait le meilleur exemple jamais réalisé pour Image Zoom et Pan sous Android,

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

5
Sujit

Ci-dessous le code pour ImageFullViewActivity Class

 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

J'ai préféré la bibliothèque davemorrissey/subsampling-scale-image-view plutôt que chrisbanes/PhotoView ( réponse de star18bit)

  • Les deux sont des projets actifs (les deux ont des engagements en 2015)
  • Les deux ont une démo sur le PlayStore
  • subsampling-scale-image-view prend en charge les grandes images (supérieures à 1080p) sans exception de mémoire en raison du sous-échantillonnage, que PhotoView ne prend pas en charge
  • subsampling-scale-image-view semble avoir une API plus grande et une meilleure documentation

Voir Comment convertir AAR en JAR , si vous souhaitez utiliser le sous-échantillonnage-échelle-image-vue avec Eclipse/ADT

2
OneWorld

Vous pouvez vérifier la réponse dans une question connexe. https://stackoverflow.com/a/16894324/1465756

Juste importer la bibliothèque https://github.com/jasonpolites/gesture-imageview .

dans votre projet et ajoutez les éléments suivants dans votre fichier de mise en page:

<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