title: Android: Drag and Drop multiple images
body: <p>I have this "Drag and Drop" thingy.</p>
  
  <p>So basically we are making a prototype to let the user (kid) to drag and drop the candy to a jar.
  The code below will works only for one candy (1 image), the second image will not move at all. I don't know why.</p>
  
  <p>Any answer will be highly appreciated and I hope you can explain it because I am really new in this android development. Thank you.</p>
  
  <p>These are the code I have been researching for a while</p>
  
  <pre><code>package com.example.mathventure;
  
  import com.example.mathventure.R.drawable;
  
  import android.os.Bundle;
  import android.annotation.SuppressLint;
  import android.app.Activity;
  import android.graphics.Rect;
  import android.view.Menu;
  import android.view.MotionEvent;
  import android.view.View;
  import android.view.View.OnTouchListener;
  import android.widget.AbsoluteLayout;
  import android.widget.ImageView;
  
  @SuppressLint("NewApi")
  public class AddTutActivity extends Activity {
      private static int candyInJar = 3;
      private int candyOutJar = 2;
      private int totalCandy;
      //private String candyId;
      private ImageView[] candies = new ImageView[11];
      private ImageView[] candiesOut = new ImageView[candyOutJar];
      private AbsoluteLayout tutLayout;
          @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_add_tut);
  
          tutLayout = (AbsoluteLayout) findViewById(R.id.tutLayout);
          tutLayout.setOnTouchListener(new touchListener());
          candiesOut[0] = (ImageView) findViewById(R.id.candyOut1);
          candiesOut[1] = (ImageView) findViewById(R.id.candyOut2);
          candiesOut[0].setOnTouchListener(new touchListener());
          candiesOut[1].setOnTouchListener(new touchListener());
  
  
  
  
          totalCandy = candyInJar + candyOutJar;
          for(int i=0;i&lt;candies.length;i++){
              candies[i] = new ImageView(this);
          }
          candies[0].setBackgroundResource(R.drawable.candy_jar_0);
          candies[1].setBackgroundResource(R.drawable.candy_jar_1);
          candies[2].setBackgroundResource(R.drawable.candy_jar_2);
          candies[3].setBackgroundResource(R.drawable.candy_jar_3);
          candies[4].setBackgroundResource(R.drawable.candy_jar_4);
          candies[5].setBackgroundResource(R.drawable.candy_jar_5);
          candies[6].setBackgroundResource(R.drawable.candy_jar_6);
          candies[7].setBackgroundResource(R.drawable.candy_jar_7);
          candies[8].setBackgroundResource(R.drawable.candy_jar_8);
          candies[9].setBackgroundResource(R.drawable.candy_jar_9);
          candies[10].setBackgroundResource(R.drawable.candy_jar_10);
  
          candies[candyInJar] = (ImageView) findViewById(R.id.candyInJar);
  
      }
  
      private boolean dragging = false;
      private Rect hitRect = new Rect();
  
  
      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
          // Inflate the menu; this adds items to the action bar if it is present.
          getMenuInflater().inflate(R.menu.activity_add_tut, menu);
          return true;
      }
  
      class touchListener extends Activity implements OnTouchListener{
  
          @Override
          public boolean onTouch(View v, MotionEvent event) {
              // TODO Auto-generated method stub
              boolean eventConsumed = true;
              int x = (int)event.getX();
              int y = (int)event.getY();
              int dragging = 0;
              int action = event.getAction();
              if (action == MotionEvent.ACTION_DOWN) {
                  if (v == candiesOut[0]) {
                      dragging = 0;
                      eventConsumed = false;
                  }
                  if (v == candiesOut[1]){
                      dragging = 1;
                      eventConsumed = false;
                  }
              } else if (action == MotionEvent.ACTION_UP) {
  
                  if (dragging == 0) {
                      candies[candyInJar].getHitRect(hitRect);
                      if (hitRect.contains(x, y)){
                          candiesOut[0].setImageDrawable(null);
                          candies[candyInJar].setImageResource(drawable.candy_jar_4);
                      }
                  }
                  else if(dragging == 1){
                      candies[candyInJar].getHitRect(hitRect);
                      if (hitRect.contains(x, y)){
                          candiesOut[1].setImageDrawable(null);
                          candies[candyInJar].setImageResource(drawable.candy_jar_5);
                      }
                  }
                  eventConsumed = false;
  
              } else if (action == MotionEvent.ACTION_MOVE) {
                  if (v != candiesOut[0] &amp;&amp; v != candiesOut[1]) {
                      if (dragging != 1) {
                          setAbsoluteLocationCentered(candiesOut[dragging], x, y);
                      }
                  }
              }
  
              return eventConsumed;
          }
  
  
          private void setAbsoluteLocationCentered(View v, int x, int y) {
              setAbsoluteLocation(v, x - v.getWidth() / 2, y - v.getHeight() / 2);
          }
  
  
          private void setAbsoluteLocation(View v, int x, int y) {
              AbsoluteLayout.LayoutParams alp = (AbsoluteLayout.LayoutParams) v.getLayoutParams();
              alp.x = x;
              alp.y = y;
              v.setLayoutParams(alp);
          }
  
          private void setSameAbsoluteLocation(View v1, View v2) {
              AbsoluteLayout.LayoutParams alp2 = (AbsoluteLayout.LayoutParams) v2.getLayoutParams();
              setAbsoluteLocation(v1, alp2.x, alp2.y);
          }
      }
  
  
  }
  </code></pre>
  
  <p>this one is for the xml:</p>
  
  <pre><code>&lt;AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:tools="http://schemas.android.com/tools"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      tools:context=".AddTutActivity" 
      android:id="@+id/tutLayout"&gt;
  
  
  &lt;TextView
      android:id="@+id/textView1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_marginTop="116dp"
      android:fontFamily="123Marker"
      android:text="3 candies + 2 candies = ?"
      android:textColor="@android:color/black"
      android:textSize="50sp" /&gt;
  
  &lt;TextView
      android:id="@+id/TextView01"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:fontFamily="123Marker"
      android:text="Below is a sample question on addition. Now, you need to move the 2 candies you wanted to add into the candy jar."
      android:textColor="@android:color/black"
      android:textSize="25sp" 
      android:background="#FF3300"/&gt;
  
  &lt;ImageView
      android:id="@+id/candyInJar"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_marginLeft="178dp"
      android:layout_x="149dp"
      android:layout_y="167dp"
      android:src="@drawable/candy_jar_3" /&gt;
  
  &lt;ImageView
      android:id="@+id/candyOut1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_marginRight="94dp"
      android:layout_x="489dp"
      android:layout_y="347dp"
      android:src="@drawable/candy" /&gt;
  
  &lt;ImageView
      android:id="@+id/candyOut2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_x="544dp"
      android:layout_y="346dp"
      android:src="@drawable/candy" /&gt;
  
  &lt;/AbsoluteLayout&gt;
  </code></pre>