cómo arrastrar y soltar una imagen sobre una imagen

Hola y feliz Navidad a todos para mañana (Reino Unido). Soy bastante nuevo en Android pero he manejado con éxito algunas partes y lo que estoy tratando de lograr ahora es una simple actividad de arrastrar y soltar que permite al usuario arrastrar y soltar una forma ImageView en otra ImageView, si la imagen coincide, entonces debería reemplazar la imagen superpuesta, y si no es así, debería volver a donde estaba, sé que esto significa crear un bloque if / else en mi evento Drop pero después de pulsar el botón pocos tutoriales que no pude juntar lo que quería y actualmente no tengo suficiente conocimiento de Java para lograrlo. Actualmente tengo un diseño que contiene 6 vistas de imágenes, 3 son estáticas y las otras 3 se pueden mover a la pantalla y colocar. en el diseño, pero no en las vistas de imagen, creo que esto se debe a que he diseñado el draglistener para mi diseño y no para mis vistas de imagen pero estoy un poco perdido, ¿puede alguien ayudarme? Gracias por cualquier y todas las sugerencias. aqui esta mi codigo

DragandDrop.java    

import android.os.Bundle;
import android.view.DragEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.DragShadowBuilder;
import android.view.View.OnDragListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.app.Activity;

public class DragandDrop extends Activity implements OnTouchListener, OnDragListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.draganddrop);
    findViewById(R.id.squareImage).setOnTouchListener(this);
    findViewById(R.id.circleImage).setOnTouchListener(this);
    findViewById(R.id.triangleImage).setOnTouchListener(this);
    findViewById(R.id.top_container).setOnDragListener(this);
    findViewById(R.id.bottom_container).setOnDragListener(this);
    findViewById(R.id.squareImage1).setOnDragListener(this);
    findViewById(R.id.circleImage1).setOnDragListener(this);
    findViewById(R.id.triangleImage1).setOnDragListener(this);
}

@Override
public boolean onTouch(View v, MotionEvent e) {
    if (e.getAction() == MotionEvent.ACTION_DOWN) {
        DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
        v.startDrag(null, shadowBuilder, v, 0);
        v.setVisibility(View.INVISIBLE);
        return true;
    } else {
        return false;
    }
}

@Override
public boolean onDrag(View v, DragEvent e) {
    if (e.getAction()==DragEvent.ACTION_DROP) {
        View view = (View) e.getLocalState();
        ViewGroup from = (ViewGroup) view.getParent();
        from.removeView(view);
        LinearLayout to = (LinearLayout) v;
        to.addView(view);
        view.setVisibility(View.VISIBLE);
    }
    return true;
}

}

draganddrop.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context=".draganddrop"
android:background="@drawable/dragshapes"
android:orientation="vertical"
android:id="@+id/dropLayout">


<LinearLayout
    android:id="@+id/top_container"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:background="@android:color/transparent"
    android:orientation="horizontal"
    android:gravity="center">

    <ImageView
        android:contentDescription="@string/square_text_content"
        android:id="@+id/squareImage1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_margin="10dp"
        android:src="@drawable/dragsquare1" />

    <ImageView
        android:contentDescription="@string/circle_text_content"
        android:id="@+id/circleImage1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_margin="10dp"
        android:src="@drawable/dragcircle1" />

    <ImageView
        android:contentDescription="@string/triangle_text_content"
        android:id="@+id/triangleImage1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_margin="10dp"
        android:src="@drawable/dragtriangle1" />



</LinearLayout>

<LinearLayout
    android:id="@+id/bottom_container"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:background="@android:color/transparent"
    android:orientation="horizontal"
    android:gravity="center">
    <ImageView
        android:contentDescription="@string/square_text_content"
        android:id="@+id/squareImage"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_margin="10dp"
        android:src="@drawable/dragsquare" />

    <ImageView
        android:contentDescription="@string/circle_text_content"
        android:id="@+id/circleImage"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_margin="10dp"
        android:src="@drawable/dragcircle" />

    <ImageView
        android:contentDescription="@string/triangle_text_content"
        android:id="@+id/triangleImage"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_margin="10dp"
        android:src="@drawable/dragtriangle" />

</LinearLayout>

</LinearLayout>

Respuestas a la pregunta(1)

Su respuesta a la pregunta