Faites glisser et déposer des images dans android
Je travaille sur un word scramble jeu qui permet à l'utilisateur de déplacer l'image à l'image..si l'image ne correspond pas alors il doit revenir à sa position initiale, d'où il a été tiré.J'ai écrit un exemple de code pour déplacer l'image, mais le problème, c'est que si je déplace une image de l'image voisine aussi commence à se déplacer.. Voici un exemple de code.
/** Touchmoveimage.java*/
package com.examples.Touchmoveimage;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.LinearLayout.LayoutParams;
public class Touchmoveimage extends Activity implements OnTouchListener{
int windowwidth;
int windowheight;
private LayoutParams layoutParams ;
private LayoutParams layoutParams1 ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
windowwidth = getWindowManager().getDefaultDisplay().getWidth();
windowheight = getWindowManager().getDefaultDisplay().getHeight();
ImageView ball= (ImageView)findViewById(R.id.ball);
ball.setOnTouchListener(this);
ImageView ball1 = (ImageView)findViewById(R.id.ball1);
ball1.setOnTouchListener(this);
}
public boolean onTouch(View v,MotionEvent event) {
switch(v.getId())
{
case R.id.ball:
ImageView ball= (ImageView)findViewById(R.id.ball);
layoutParams = (LayoutParams) ball.getLayoutParams();
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
int x_cord = (int)event.getRawX();
int y_cord = (int)event.getRawY();
if(x_cord>windowwidth){x_cord=windowwidth;}
if(y_cord>windowheight){y_cord=windowheight;}
layoutParams.leftMargin = x_cord -25;
layoutParams.topMargin = y_cord - 75;
ball.setLayoutParams(layoutParams);
break;
default : break;
}
case R.id.ball1:
ImageView ball1= (ImageView)findViewById(R.id.ball1);
layoutParams1 = (LayoutParams) ball1.getLayoutParams();
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
int x_cord = (int)event.getRawX();
int y_cord = (int)event.getRawY();
if(x_cord>windowwidth){x_cord=windowwidth;}
if(y_cord>windowheight){y_cord=windowheight;}
layoutParams1.leftMargin = x_cord -25;
layoutParams1.topMargin = y_cord - 75;
ball1.setLayoutParams(layoutParams1);
break;
default : break;
}
}
return true;}
}
<!-- main.xml -->
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
android:layout_width="50sp"
android:layout_height="50sp"
android:id="@+id/ball"
android:src="@drawable/ball">
</ImageView>
<ImageView
android:layout_y="30dip"
android:layout_x="118dip"
android:layout_width="50sp"
android:layout_height="50sp"
android:id="@+id/ball1"
android:src="@drawable/ball1">
</ImageView>
</LinearLayout>
Quelqu'un m'aider plz..à Essayer toutes les choses possibles pour le résoudre..
Bonjour Pinky Votre Problème est Résolu ou pas?
tech-papers.org/android-drag-and-drop
Voir: developer.android.com/guide/topics/ui/...
tech-papers.org/android-drag-and-drop
Voir: developer.android.com/guide/topics/ui/...
OriginalL'auteur Veena | 2010-12-24
Vous devez vous connecter pour publier un commentaire.
Vous devez vous assurer que l'événement se passe dans le ballon. Le onTouch événement sera déclarée même si vous touchez à l'extérieur de l'objet image. Donc, ce que vous pourriez faire est de vérifier dans la ACTION_DOWN phases que vous avez bloqué à assurez-vous que le contact est dans les limites de l'objet. Vous pouvez ensuite définir un indicateur pour informer le système sur lequel la balle est déplacée. Je vous laisse faire le codage, mais j'espère que cela vous permettra d'obtenir une idée de ce à faire.
Vous devez assurez-vous de assurez-vous que le doigt est dans les limites de la balle. Essayez juste l'impression de x/y de coordonnées lorsque ACTION_DOWN est poussé, et voir ce qui se passe. Comparez les limites de l'image.
Ouais j'ai essayé d'impression ordonnées co.. Si le 1er ballon est touché, il affiche ses coordonnées et il imprime aussi le message qui est censé être affiché lorsque la boule 2 est touché.. C'est déroutant moi.. c'Est mon approche correcte btw?? toute autre façon de faire cela??
Je rencontre un problème. Si l'utilisateur fait glisser ou presses trop à droite ou à gauche ou en haut ou en bas d'une mise en page de l'app FC. Voici le lien: stackoverflow.com/questions/21347431/...
OriginalL'auteur PearsonArtPhoto
Vous pouvez prendre une idée à partir de ce code, il sera très utile... et je travaille également dans ce concept.
Et XML.....
OriginalL'auteur Android Help
Je suis bête... Après l'avoir regardé plus attentivement, j'ai réalisé que c'est votre approche fondamentale qui est faux. Vous souhaitez définir le onTouchListener sur la boule de l'ImageView. J'avais en fait il suffit de créer un objet ball, vous êtes sûr de vouloir faire quelque chose avec eux plus tard. Les premières coordonnées aussi bien là comme partout, donc... Donner un coup de feu, et laissez-moi savoir comment cela fonctionne.
Hey créer une boule d'objet comme dans..?? Dans mon jeu, je serais ajouter dynamiquement des images à l'ImageView..
OriginalL'auteur PearsonArtPhoto
Le problème est avec le LinearLayout ,comme il a ses points de vue liés les uns aux autres , horizontalement ou verticalement. Simplement modifier votre mise en page pour FrameLayout ou à l'obsolète AbsoluteLayout. Qui fonctionne correctement pour vous.
OriginalL'auteur A.Zidan
Je suis en train d'écrire un programme similaire et ont le même problème. Il me semble que c'est possible d'avoir qu'un seul "onTouchListener" dans l'ensemble du programme. J'utilise FrameLayout et quand je touche l'écran, je veux un nouveau ballon à apparaître. Il fonctionne lorsque je définis "FrameLayout.setOnTouchListener"
Si je touche existant ballon, je veux le faire glisser quelque part. Il fonctionne lorsque "Boule.setOnTouchListener" est défini.
Mais quand j'utilise à la fois "setOnTouchListeners" que seulement l'un d'entre eux fonctionne.
Donc je pense que Android peut fonctionner avec un seul "setOnTouchListener", et vous avez en quelque sorte (je ne sais pas comment) vérifier dynamiquement créé ballon a été touché et de la traiter.
OriginalL'auteur Racky