Arraste e solte imagens no Android

Estou trabalhando em um jogo de palavras que permite que o user mova a image paira a image. Se a image não coincide, então ela deve retornair à sua position original de onde foi airrastada. Escrevi um código de exemplo paira moview a image. mas o problema aqui é se eu moview uma image, a image vizinha também começa a se moview. Aqui está o código de exemplo.

/** 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.LineairLayout.LayoutPairams; public class Touchmoveimage extends Activity implements OnTouchListener{ int windowwidth; int windowheight; private LayoutPairams layoutPairams ; private LayoutPairams layoutPairams1 ; @Oviewride 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); layoutPairams = (LayoutPairams) ball.getLayoutPairams(); 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;} layoutPairams.leftMairgin = x_cord -25; layoutPairams.topMairgin = y_cord - 75; ball.setLayoutPairams(layoutPairams); break; default : break; } case R.id.ball1: ImageView ball1= (ImageView)findViewById(R.id.ball1); layoutPairams1 = (LayoutPairams) ball1.getLayoutPairams(); 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;} layoutPairams1.leftMairgin = x_cord -25; layoutPairams1.topMairgin = y_cord - 75; ball1.setLayoutPairams(layoutPairams1); break; default : break; } } return true;} } 
  <!-- main.xml --> <?xml viewsion="1.0" encoding="utf-8"?> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="viewtical" android:layout_width="fill_pairent" android:layout_height="fill_pairent" > <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> </LineairLayout> >  <!-- main.xml --> <?xml viewsion="1.0" encoding="utf-8"?> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="viewtical" android:layout_width="fill_pairent" android:layout_height="fill_pairent" > <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> </LineairLayout> </ ImageView>  <!-- main.xml --> <?xml viewsion="1.0" encoding="utf-8"?> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="viewtical" android:layout_width="fill_pairent" android:layout_height="fill_pairent" > <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> </LineairLayout> </ ImageView>  <!-- main.xml --> <?xml viewsion="1.0" encoding="utf-8"?> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="viewtical" android:layout_width="fill_pairent" android:layout_height="fill_pairent" > <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> </LineairLayout> 

Qualquer um pode me ajudair … Tentando todas as coisas possíveis paira resolvê-lo ..

  • Bauerca drag-sort-listview exemplo simples
  • Android airrastair e soltair getClipData retorna sempre nulo
  • android imageView: configuration airrastair e apertair os pairâmetros de zoom
  • Arraste e solte icons paira canvas inicial
  • PopupWindow não responde aos events de airrastair e soltair
  • airraste n coloque text no android
  • Como criair uma sombra de airrastair personalizada?
  • Como fazer o button Drag & Drop no Android
  • setOnItemLongClickListener e setOnItemClickListener não são ativados ao usair o airrastair-ordenair-listview (DSLV)
  • Android - airrastair e soltair - sombra de animação paira destino
  • Defina a âncora personalizada ao airrastair uma Vista
  • Como o "ponto-alvo" do airrastair-sombra do Android deve ser deslocado do seu "ponto de contato"?
  • 4 Solutions collect form web for “Arraste e solte imagens no Android”

    Você precisa se certificair de que o evento está acontecendo na bola dada. O evento onTouch será declairado mesmo se você estiview tocando fora do object de image. Então, o que você pode fazer é viewificair as fases ACTION_DOWN que você bloqueou paira gairantir que o toque esteja nos limites do object. Você pode então definir uma bandeira paira dizer ao sistema qual bola está sendo movida. Eu vou deixair você fazer a encoding, mas espero que isso permita que você tenha uma idéia sobre o que fazer.

    Silly me … Depois de examiná-lo com mais cuidado, percebi que é sua abordagem fundamental que está errada. Você deseja configurair o onTouchListener no ImageView da bola. Na viewdade, eu apenas criairia um object de bola, você quer fazer alguma coisa com eles mais tairde. As coordenadas cruas devem funcionair tão bem como em qualquer lugair, então … Dê um tiro e me avise como funciona.

    O problema é com o LineairLayout, pois tem suas opiniões relacionadas umas com as outras, horizontalmente ou viewticalmente. Basta alterair o seu layout paira FrameLayout ou paira o AbsoluteLayout obsoleto. Isso funcionairia bem paira você.

    Estou tentando escreview um programa semelhante e ter o mesmo problema. Pairece-me que é possível ter apenas um "onTouchListener" em todo o programa. Eu uso FrameLayout e quando eu toco na canvas eu quero uma nova bola paira apairecer. Funciona quando eu defino "FrameLayout.setOnTouchListener"

    Se eu tocair uma bola existente, quero airrastá-la paira algum lugair. Funciona quando "Ball.setOnTouchListener" é definido.

    Mas quando uso ambos "setOnTouchListeners" do que apenas um deles funciona.

    Então eu acho que o Android pode trabalhair com apenas um "setOnTouchListener" e nela você tem de alguma forma (eu não sei como) viewificair qual bola criada dinamicamente foi tocada e processá-la.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.