romain31 Posté(e) 17 novembre 2010 Share Posté(e) 17 novembre 2010 Bonjour, Nous sommes en train de développer une application android avec en autre la possibilité de manipuler des images avec des actions multi touch (plus d'une pression de doigts sur l'écran). Notre probleme est que nous ne pouvons pas faire ce que nous voulons avec le widget ImageView car il n'est pas prévu de fonctions pour zoomer ou naviger sur une image. Nous avons besoin de : Zoom Dezoom Naviguer Rotationner ... Un peu comme un aperçu standard d'image sous android, mais ce dernier inséré dans notre application. Quelqu'un sait t-il s'il existe un widget ou une fonction qui permet ces manipulations d'images sous Android ? Merci d'avance Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 17 novembre 2010 Share Posté(e) 17 novembre 2010 Si c'est juste de la visualisation d'image, pourquoi ne pas faire appel à l'application "Galerie", celle fournie avec le téléphone? Il y a moyen de faire ça avec un Intent je pense Lien vers le commentaire Partager sur d’autres sites More sharing options...
romain31 Posté(e) 18 novembre 2010 Auteur Share Posté(e) 18 novembre 2010 Mon besoin exact c'est d'avoir cette manipulation d'image DANS mon application. Il me semble que ta proposition nécéssite d'ouvrir l'application Galerie (pas de l'utiliser dans mon app). Ce n'est pas le but recherché Mais merci tout de même de ta contribution Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 18 novembre 2010 Share Posté(e) 18 novembre 2010 Qu'entends tu par manipulation d'image? Si tu as juste besoin de visualiser une image, un appel à l'application Galerie est suffisant. Et elle paraitra "intégrée" à ton application (un "retour arrière" te ramènera dans ton appli) Si tu en as besoin très rapidement, tu peux toujours utiliser une ImageView qui occupe la totalité de l'écran. Mais tu n'aura pas de "contrôle". C'est déjà bien pour un prototype. Si tu veux un truc plus complexe... je pense que tu va devoir le faire "à la main" :/ Il n'y a pas à ma connaissance de classe toute faite pour ce genre de chose. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nivek Posté(e) 19 novembre 2010 Share Posté(e) 19 novembre 2010 Dans Emailalbum j'ai dû développer ma propre imageview... un jour j'ai l'intention d'en faire un composant standalone mais en l'état j'en suis loin. Lien vers le commentaire Partager sur d’autres sites More sharing options...
clavat Posté(e) 20 novembre 2010 Share Posté(e) 20 novembre 2010 Bonjour, J'ai parcouru google et j'ai trouvé cette page j'ai lu seulement la 1ere ligne : A tween animation can perform a series of simple transformations (position, size, rotation, and transparency) on the contents of a View object. ICI Dit moi si cela ta été utile ;) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Cuillère Posté(e) 21 novembre 2010 Share Posté(e) 21 novembre 2010 Je pense avoir exactement ce que tu recherches. Permet de bouger l'image, la zommer/dézommer avec le multitouch. package com.android.proto; import android.app.Activity; import android.graphics.Matrix; import android.os.Bundle; import android.util.FloatMath; import android.view.MotionEvent; import android.widget.ImageView; import android.widget.TextView; public class Main extends Activity{ /** Called when the activity is first created. */ TextView txtProto; ImageView view; static final int NONE = -1; static final int DRAG = 0; static final int ZOOM = 1; int mode = NONE; float startX = 0; float startY = 0; float spacing = 0; float oldSpacing = 0; float imgX = 0; float imgY = 0; float translateX = 0; float translateY = 0; Matrix matrix = new Matrix(); Matrix savedMatrix = new Matrix(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); txtProto = (TextView)findViewById(R.id.txtProto); view = (ImageView)findViewById(R.id.imgProto); view.setBackgroundResource(R.drawable.protobc); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: savedMatrix.set(matrix); startX = event.getX(); startY = event.getY(); translateX= 0; translateY=0; mode = DRAG; txtProto.setText("DOWN : "+imgX+";"+imgY); break; case MotionEvent.ACTION_MOVE: if(mode == DRAG){ matrix.set(savedMatrix); translateX = event.getX() - startX; translateY = event.getY() - startY; matrix.postTranslate(translateX, translateY); txtProto.setText("MOVE 1 : "+imgX+";"+imgY); } if(mode == ZOOM){ matrix.set(savedMatrix); spacing = spacing(event); float scale = spacing/oldSpacing; matrix.postScale(scale, scale, imgX, imgY); txtProto.setText("MOVE 2 : " + (int)scale+";"+imgX+";"+imgY); } view.setImageMatrix(matrix); break; case MotionEvent.ACTION_POINTER_DOWN: startX = event.getX(); startY = event.getY(); imgX = imgX+translateX; imgY = imgY+translateY; oldSpacing = spacing(event); mode = ZOOM; txtProto.setText("P_DOWN : "+imgX+";"+imgY); break; case MotionEvent.ACTION_UP: savedMatrix.set(matrix); imgX = imgX+translateX; imgY = imgY+translateY; mode = NONE; txtProto.setText("UP : "); break; case MotionEvent.ACTION_POINTER_UP: startX = event.getX(0); startY = event.getY(0); translateX= 0; translateY=0; mode = NONE; txtProto.setText("P_UP : "+imgX+";"+imgY); break; default: break; } return super.onTouchEvent(event); } private float spacing(MotionEvent event) { float x = event.getX(0) - event.getX(1); float y = event.getY(0) - event.getY(1); return FloatMath.sqrt(x * x + y * y); } } Lien vers le commentaire Partager sur d’autres sites More sharing options...
paoelrital Posté(e) 22 novembre 2010 Share Posté(e) 22 novembre 2010 Bonjour, je suis un collègue de Romain31. J'ai essayé ton bout de code avec le listener d'events. J'ai relevé 2 petits problèmes : - je ne peux pas tester le multitouch parce que je suis avec l'émulateur. Alors j'ai essayé de le simuler en mettant des valeurs manuellement au 2ème pointeur mais bon c'est pas très pratique parce que du coup c'est soit je me déplace soit je zoom. Car dès que je maintient le clic, j'insère le 2ème. - j'ai toujours un problème d'affichage. C'est à dire que j'ai l'impression que les opérations sur la matrice de l'image se fait, mais que l'affichage ne le prend pas en compte. Dois-je continuer sur cette voie ou connaissez-vous une façon plus simple ? Merci de ton aide. Lien vers le commentaire Partager sur d’autres sites More sharing options...
paoelrital Posté(e) 22 novembre 2010 Share Posté(e) 22 novembre 2010 Par contre, juste pour info les valeurs imgX et imgY ne changent jamais et restent à la valeur 0.0 ... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sylvaner Posté(e) 22 novembre 2010 Share Posté(e) 22 novembre 2010 Un plugin photoshop n'avait pas été développé donc ce but à l'époque de la guerre Apple / Adobe ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
paoelrital Posté(e) 22 novembre 2010 Share Posté(e) 22 novembre 2010 Juste pour vous dire que c'est bon j'y suis arrivé. Merci beaucoup à vous et plus particulièrement à "Cuillère". J'ai utilisé le code que tu m'as passé. J'ai dû faire quelques modifications pour que ça fonctionne dans mon cas mais ça fonctionne pafaitement. Bonne soirée. Lien vers le commentaire Partager sur d’autres sites More sharing options...
romain31 Posté(e) 24 novembre 2010 Auteur Share Posté(e) 24 novembre 2010 Merci à tous pour votre contribution ! Bonne Journée Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.