<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://manuais.iessanclemente.net/index.php?action=history&amp;feed=atom&amp;title=Drag_%26_Drop</id>
	<title>Drag &amp; Drop - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://manuais.iessanclemente.net/index.php?action=history&amp;feed=atom&amp;title=Drag_%26_Drop"/>
	<link rel="alternate" type="text/html" href="https://manuais.iessanclemente.net/index.php?title=Drag_%26_Drop&amp;action=history"/>
	<updated>2026-10-23T07:53:28Z</updated>
	<subtitle>Historial de revisiones de esta página en la wiki</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://manuais.iessanclemente.net/index.php?title=Drag_%26_Drop&amp;diff=39744&amp;oldid=prev</id>
		<title>Carrion: /* Clase Activity Preguntas */</title>
		<link rel="alternate" type="text/html" href="https://manuais.iessanclemente.net/index.php?title=Drag_%26_Drop&amp;diff=39744&amp;oldid=prev"/>
		<updated>2013-11-27T18:24:12Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Clase Activity Preguntas&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Introdución==&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;NOTA&amp;#039;&amp;#039;&amp;#039;: imos usar como SDK mínimo o 11.&lt;br /&gt;
*Se necesitamos controlar a versión o podemos facer coa clase VERSION da seguinte forma:&lt;br /&gt;
		String androidOS = Build.VERSION.RELEASE;&lt;br /&gt;
		if (androidOS.startsWith(&amp;quot;2&amp;quot;)) ==&amp;gt; versión 2.x.x&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Con &amp;#039;&amp;#039;&amp;#039;Drag &amp;amp; Drop (Arrastrar e soltar)&amp;#039;&amp;#039;&amp;#039; permíteselle ao usuario que arrastre datos dende unha Vista á outra.&lt;br /&gt;
*O proceso divídese en:&lt;br /&gt;
**O proceso comeza cando o usuario realiza algún xesto nun obxecto que reconozamos como inicio do arrastre. Por exemplo: un LongClick&lt;br /&gt;
**A aplicación informa ao SO que o proceso de arrastre comezou e indícalle que elemento (View) é o que ten que debuxar mentres se arrastra, que é un elemento distinto do que iniciamos o proceso (pode ser a mesma imaxe para que pareza que movemos algo)&lt;br /&gt;
**Hai que definir os obxectos Views sobre os que se vai recibir o Drop (Soltar). Cando se comeza a arrastrar un obxecto o SO manda unha mensaxe a todos os elementos gráficos da nosa pantalla que poidan recibir un drop, esperando unha contestación de se aceptarán ou non os diferentes eventos que se poidan dar durante o arrastre (que o obxecto entre dentro do View, saia, solte,....)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Referencias&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
**http://developer.android.com/guide/topics/ui/drag-drop.html&lt;br /&gt;
&lt;br /&gt;
==Caso práctico sinxelo==&lt;br /&gt;
*Comezamos creando un proxecto: &amp;#039;&amp;#039;&amp;#039;U3_20_DragDrop&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Usaremos as seguintes imaxes no recurso &amp;#039;&amp;#039;&amp;#039;/res/drawable&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
[[Image:ok.png]]&lt;br /&gt;
[[Image:no.png]]&lt;br /&gt;
[[Image:question.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*O funcionamento da Activity é o seguinte:&lt;br /&gt;
[[Image:Android_2013_U3_20_DragDrop_01.jpg]]&lt;br /&gt;
*Ao facer un LongClick na pregunta pódese comezar a arrastrar.&lt;br /&gt;
*En función do botón ao que se arrastre obtemos unha mensaxe que indica a que botón se arrastrou: OK ou NO.&lt;br /&gt;
&lt;br /&gt;
===XML do layout===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;LinearLayout xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;&lt;br /&gt;
    xmlns:tools=&amp;quot;http://schemas.android.com/tools&amp;quot;&lt;br /&gt;
    android:id=&amp;quot;@+id/LinearLayoutPreguntas&amp;quot;&lt;br /&gt;
    android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
    android:layout_height=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
    android:orientation=&amp;quot;vertical&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;TextView&lt;br /&gt;
        android:layout_width=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
        android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
        android:text=&amp;quot;Drag &amp;amp;amp; Drop&amp;quot;&lt;br /&gt;
        android:layout_gravity=&amp;quot;center&amp;quot;&lt;br /&gt;
        android:textSize=&amp;quot;22sp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;ImageView&lt;br /&gt;
        android:id=&amp;quot;@+id/imgvwPreguntaArrastrar&amp;quot;&lt;br /&gt;
        android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
        android:layout_height=&amp;quot;0dp&amp;quot;&lt;br /&gt;
        android:layout_gravity=&amp;quot;center_horizontal&amp;quot;&lt;br /&gt;
        android:layout_weight=&amp;quot;1&amp;quot;&lt;br /&gt;
        android:contentDescription=&amp;quot;Imaxe pregunta arrastrar&amp;quot;&lt;br /&gt;
        android:src=&amp;quot;@drawable/question&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;RelativeLayout&lt;br /&gt;
        android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
        android:layout_height=&amp;quot;0dp&amp;quot;&lt;br /&gt;
        android:layout_weight=&amp;quot;5&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;ImageView&lt;br /&gt;
            android:id=&amp;quot;@+id/imgVwPreguntasNo&amp;quot;&lt;br /&gt;
            android:layout_width=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
            android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
            android:layout_alignParentRight=&amp;quot;true&amp;quot;&lt;br /&gt;
            android:layout_alignTop=&amp;quot;@+id/imgvwPreguntasOk&amp;quot;&lt;br /&gt;
            android:contentDescription=&amp;quot;Imaxe preguntas NO&amp;quot;&lt;br /&gt;
            android:src=&amp;quot;@drawable/no&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;ImageView&lt;br /&gt;
            android:id=&amp;quot;@+id/imgvwPreguntasOk&amp;quot;&lt;br /&gt;
            android:layout_width=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
            android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
            android:layout_alignParentLeft=&amp;quot;true&amp;quot;&lt;br /&gt;
            android:layout_centerVertical=&amp;quot;true&amp;quot;&lt;br /&gt;
            android:contentDescription=&amp;quot;Imaxe preguntas OK&amp;quot;&lt;br /&gt;
            android:src=&amp;quot;@drawable/ok&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/RelativeLayout&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Cógigo Java da Aplicación===&lt;br /&gt;
&lt;br /&gt;
*A continuación debullamos o código:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
package com.example.u3_20_dragdrop;&lt;br /&gt;
&lt;br /&gt;
import android.app.Activity;&lt;br /&gt;
import android.os.Build;&lt;br /&gt;
import android.os.Bundle;&lt;br /&gt;
import android.view.DragEvent;&lt;br /&gt;
import android.view.Menu;&lt;br /&gt;
import android.view.View;&lt;br /&gt;
import android.view.View.DragShadowBuilder;&lt;br /&gt;
import android.view.View.OnLongClickListener;&lt;br /&gt;
import android.view.ViewGroup;&lt;br /&gt;
import android.widget.ImageView;&lt;br /&gt;
import android.widget.Toast;&lt;br /&gt;
&lt;br /&gt;
public class U3_20_DragDrop extends Activity {&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;
		super.onCreate(savedInstanceState);&lt;br /&gt;
		setContentView(R.layout.activity_u3_20__drag_drop);&lt;br /&gt;
&lt;br /&gt;
		String androidOS = Build.VERSION.RELEASE;&lt;br /&gt;
		if (!(androidOS.startsWith(&amp;quot;2&amp;quot;)) &amp;amp;&amp;amp; !(androidOS.startsWith(&amp;quot;1&amp;quot;)))&lt;br /&gt;
			xestionarArrastrar();&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	private void xestionarArrastrar() {&lt;br /&gt;
		ImageView pregunta = (ImageView) findViewById(R.id.imgvwPreguntaArrastrar);&lt;br /&gt;
&lt;br /&gt;
		// Xestionamos cando prememos durante un tempo maior a 1 seg.&lt;br /&gt;
		pregunta.setOnLongClickListener(new OnLongClickListener() {&lt;br /&gt;
&lt;br /&gt;
			@Override&lt;br /&gt;
			public boolean onLongClick(View v) {&lt;br /&gt;
				// TODO Auto-generated method stub&lt;br /&gt;
				DragShadowBuilder sombra = new DragShadowBuilder(v);&lt;br /&gt;
				v.startDrag(null, sombra, null, 0);&lt;br /&gt;
				v.setVisibility(View.INVISIBLE);&lt;br /&gt;
				return true;&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
               View.OnDragListener _OnDragListener = new View.OnDragListener() {&lt;br /&gt;
 &lt;br /&gt;
                        @Override&lt;br /&gt;
                        public boolean onDrag(View arg0, DragEvent arg1) {&lt;br /&gt;
                                ImageView pregunta = (ImageView) findViewById(R.id.imgvwPreguntaArrastrar);&lt;br /&gt;
 &lt;br /&gt;
                                // Este método vaise chamar 3 veces: ao soltar a imaxe pregunta&lt;br /&gt;
                                // ou na imaxe OK&lt;br /&gt;
                                // ou na imaxe NO&lt;br /&gt;
                                // ou no Layout&lt;br /&gt;
                                if (arg1.getAction() == DragEvent.ACTION_DRAG_STARTED) {&lt;br /&gt;
 &lt;br /&gt;
                                        return true; // Aceptamos xestionar os eventos&lt;br /&gt;
 &lt;br /&gt;
                                }&lt;br /&gt;
                                if (arg1.getAction() == DragEvent.ACTION_DRAG_ENTERED) {&lt;br /&gt;
                                   // Para cambiar de imaxe ó entrar&lt;br /&gt;
                                   //((ImageView)arg0).setImageResource(R.drawable.imaxeoentrar);&lt;br /&gt;
                                }&lt;br /&gt;
                                if (arg1.getAction() == DragEvent.ACTION_DRAG_EXITED) {&lt;br /&gt;
                                  // Para cambiar de imaxe o ó saír&lt;br /&gt;
                                  //((ImageView)arg0).setImageResource(R.drawable.imaxeosair);&lt;br /&gt;
                                }&lt;br /&gt;
                                if (arg1.getAction() == DragEvent.ACTION_DROP) { &lt;br /&gt;
                                    // Soltamos a imaxe pregunta&lt;br /&gt;
 &lt;br /&gt;
                                        // COMPROBAMOS EN QUE IMAXE SE SOLTOU: OK, NO ou Layout&lt;br /&gt;
                                        switch (arg0.getId()) {&lt;br /&gt;
                                        case R.id.imgvwPreguntasOk:&lt;br /&gt;
                                                Toast.makeText(getApplicationContext(), &amp;quot;Soltaches en OK&amp;quot;, Toast.LENGTH_SHORT).show();&lt;br /&gt;
 &lt;br /&gt;
                                                break;&lt;br /&gt;
                                        case R.id.imgVwPreguntasNo:&lt;br /&gt;
                                                Toast.makeText(getApplicationContext(), &amp;quot;Soltaches en NO&amp;quot;, Toast.LENGTH_SHORT).show();&lt;br /&gt;
                                                break;&lt;br /&gt;
                                        default:&lt;br /&gt;
                                               // FACEMOS VISIBLE A IMAXE DA PREGUNTA &lt;br /&gt;
                                               // Soltouse a imaxe no layout&lt;br /&gt;
                                                pregunta.setVisibility(View.VISIBLE);&lt;br /&gt;
                                                return false;&lt;br /&gt;
                                        }&lt;br /&gt;
 &lt;br /&gt;
                                        // FACEMOS VISIBLE A IMAXE PREGUNTA&lt;br /&gt;
                                        pregunta.setVisibility(View.VISIBLE);&lt;br /&gt;
                                        return true;&lt;br /&gt;
                                }&lt;br /&gt;
                                return false;&lt;br /&gt;
                        }&lt;br /&gt;
                };&lt;br /&gt;
&lt;br /&gt;
		// Asociamos os obxectos ImageView e Layout á interface definida antes.&lt;br /&gt;
		ImageView imgOk = (ImageView) findViewById(R.id.imgvwPreguntasOk);&lt;br /&gt;
		ImageView imgNo = (ImageView) findViewById(R.id.imgVwPreguntasNo);&lt;br /&gt;
		ViewGroup pantalla = (ViewGroup) findViewById(R.id.LinearLayoutPreguntas);&lt;br /&gt;
&lt;br /&gt;
		imgNo.setOnDragListener(_OnDragListener);&lt;br /&gt;
		imgOk.setOnDragListener(_OnDragListener);&lt;br /&gt;
		pantalla.setOnDragListener(_OnDragListener);&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public boolean onCreateOptionsMenu(Menu menu) {&lt;br /&gt;
		// Inflate the menu; this adds items to the action bar if it is present.&lt;br /&gt;
		getMenuInflater().inflate(R.menu.u3_20__drag_drop, menu);&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Comprobar versión de Android====&lt;br /&gt;
*Comprobamos se a versión de Android e 3.x.x ou superior, nese caso chamamos ao método que vai xestionar o Drag&amp;amp;Drop.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;2&amp;quot; &amp;gt;&lt;br /&gt;
                String androidOS = Build.VERSION.RELEASE;&lt;br /&gt;
                if (!(androidOS.startsWith(&amp;quot;2&amp;quot;)) &amp;amp;&amp;amp; !(androidOS.startsWith(&amp;quot;1&amp;quot;)))&lt;br /&gt;
                        xestionarArrastrar();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Comezar a arrastrar====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;9,10,11&amp;quot; &amp;gt;&lt;br /&gt;
                ImageView pregunta = (ImageView) findViewById(R.id.imgvwPreguntaArrastrar);&lt;br /&gt;
 &lt;br /&gt;
                // Xestionamos cando prememos durante un tempo maior a 1 seg.&lt;br /&gt;
                pregunta.setOnLongClickListener(new OnLongClickListener() {&lt;br /&gt;
 &lt;br /&gt;
                        @Override&lt;br /&gt;
                        public boolean onLongClick(View v) {&lt;br /&gt;
                                // TODO Auto-generated method stub&lt;br /&gt;
                                DragShadowBuilder sombra = new DragShadowBuilder(v);&lt;br /&gt;
                                v.startDrag(null, sombra, null, 0);&lt;br /&gt;
                                v.setVisibility(View.INVISIBLE);&lt;br /&gt;
                                return true;&lt;br /&gt;
                        }&lt;br /&gt;
                });&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Se na imaxe da pregunta se fai un LongClick capturamos ese evento cun Listener e &lt;br /&gt;
*Indicámoslle ao S.O. o que ten que debuxar cando faga Drag sobre a imaxe.&lt;br /&gt;
*Para debuxar a imaxe (ou o que queiramos) que vai a moverse pola pantalla, temos que utilizar un obxecto da clase &amp;#039;&amp;#039;&amp;#039;DragShadowBuilder&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
*Podemos crear unha subclase de dita clase e personalizar todo o que queiramos.&lt;br /&gt;
*Para o noso exemplo, imos a usar a mesma imaxe da pregunta que está en pantalla para facelo.&lt;br /&gt;
*Para iso só temos que crear un obxecto da clase DragShadowBuilder e pasarlle no constructor o View a debuxar pola pantalla. Neste caso o View asociado a imaxe da pregunta.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;DragShadowBuilder sombra = new DragShadowBuilder(v)&amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Cando facemos un Drop, pode ser que veñan outros obxectos doutras aplicacións ou incluso da nosa, pero que non sexa o obxecto esperado.&lt;br /&gt;
*Podemos facer que coa imaxe que se arrastra, vaia asociado información dun tipo determinado, de tal forma que o obxecto que vai a recibir a imaxe (drop,) pode preguntar polo tipo de información que acompaña a imaxe (ou o que se estea arrastrando) e se non é do tipo que espera dicirlle o S.O. que non quere recibir máis eventos do obxecto que se arrastra.&lt;br /&gt;
**Neste exemplo non imos asociar información á imaxe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Chamamos ao método &amp;#039;&amp;#039;&amp;#039;startDrag()&amp;#039;&amp;#039;&amp;#039;: v.startDrag(null, sombra, null, 0);&lt;br /&gt;
*Ten catro parámetros:&lt;br /&gt;
**O primeiro: é onde iría a información que acompañaría á imaxe.&lt;br /&gt;
**O segundo: é o obxecto da clase DragShadowBuilder (A vista que se vai mover pola pantalla)&lt;br /&gt;
**O terceiro: serve para o mesmo que o primeiro pero cun tipo de información máis sinxela. &lt;br /&gt;
**O cuarto: non se utiliza.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;v.setVisibility(View.INVISIBLE)&amp;#039;&amp;#039;&amp;#039; fai que a vista que conteń a imaxe na súa posición inicial non sexa visible.&lt;br /&gt;
**Lembrar que o que aparece visualmente como obxecto que se move pola pantalla non é o orixinal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Finalmente o método onLongClick devolve true se realmente se consumou o evento LongClick.&lt;br /&gt;
&lt;br /&gt;
====Vistas nas que soltar====&lt;br /&gt;
*Agora hai que informar o S.O. sobre que obxectos van poder recibir operacións de Drop.&lt;br /&gt;
*Cada unha das vistas receptoras (contenedoras) do Drop terá que ter asociado a interface OnDragListener, polo que terán que chamar o método setOnDragListener. &lt;br /&gt;
*Como queremos que todos elas (as contedoras) teñan o mesmo código, podemos usar un obxecto da clase onDragListener para facelo (Visto no apartado de Xestión de Eventos III)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;5-7&amp;quot; &amp;gt;&lt;br /&gt;
                ImageView imgOk = (ImageView) findViewById(R.id.imgvwPreguntasOk);&lt;br /&gt;
                ImageView imgNo = (ImageView) findViewById(R.id.imgVwPreguntasNo);&lt;br /&gt;
                ViewGroup pantalla = (ViewGroup) findViewById(R.id.LinearLayoutPreguntas);&lt;br /&gt;
 &lt;br /&gt;
                imgNo.setOnDragListener(_OnDragListener);&lt;br /&gt;
                imgOk.setOnDragListener(_OnDragListener);&lt;br /&gt;
                pantalla.setOnDragListener(_OnDragListener);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*Os 2 botóns e o layout poden ser recptores da imaxe que se anda arrastrando pola pantalla, como hai que facer case o mesmo nos tres casos, crease un obxecto que implemente o método &amp;#039;&amp;#039;&amp;#039;onDrag()&amp;#039;&amp;#039;&amp;#039; do interface OnDragListener.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====O método onDrag. Implementar o Interface====&lt;br /&gt;
*Este evento é chamado cando se solta unha vista sobre outra, e é esta última quen o chama.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;4&amp;quot; &amp;gt;&lt;br /&gt;
View.OnDragListener _OnDragListener = new View.OnDragListener() {&lt;br /&gt;
 &lt;br /&gt;
                        @Override&lt;br /&gt;
                        public boolean onDrag(View arg0, DragEvent arg1) {&lt;br /&gt;
                                ImageView pregunta = (ImageView) findViewById(R.id.imgvwPreguntaArrastrar);&lt;br /&gt;
 &lt;br /&gt;
                                // Este método vaise chamar 3 veces: ao soltar a imaxe pregunta&lt;br /&gt;
                                // ou na imaxe OK&lt;br /&gt;
                                // ou na imaxe NO&lt;br /&gt;
                                // ou no Layout&lt;br /&gt;
                                if (arg1.getAction() == DragEvent.ACTION_DRAG_STARTED) {&lt;br /&gt;
 &lt;br /&gt;
                                        return true; // Aceptamos xestionar os eventos&lt;br /&gt;
 &lt;br /&gt;
                                }&lt;br /&gt;
                                if (arg1.getAction() == DragEvent.ACTION_DRAG_ENTERED) {&lt;br /&gt;
                                   // Para cambiar de imaxe ó entrar&lt;br /&gt;
                                   //((ImageView)arg0).setImageResource(R.drawable.imaxeoentrar);&lt;br /&gt;
                                }&lt;br /&gt;
                                if (arg1.getAction() == DragEvent.ACTION_DRAG_EXITED) {&lt;br /&gt;
                                  // Para cambiar de imaxe o ó saír&lt;br /&gt;
                                  //((ImageView)arg0).setImageResource(R.drawable.imaxeosair);&lt;br /&gt;
                                }&lt;br /&gt;
                                if (arg1.getAction() == DragEvent.ACTION_DROP) { &lt;br /&gt;
                                    // Soltamos a imaxe pregunta&lt;br /&gt;
 &lt;br /&gt;
                                        // COMPROBAMOS EN QUE IMAXE SE SOLTOU: OK, NO ou Layout&lt;br /&gt;
                                        switch (arg0.getId()) {&lt;br /&gt;
                                        case R.id.imgvwPreguntasOk:&lt;br /&gt;
                                                Toast.makeText(getApplicationContext(), &amp;quot;Soltaches en OK&amp;quot;, Toast.LENGTH_SHORT).show();&lt;br /&gt;
 &lt;br /&gt;
                                                break;&lt;br /&gt;
                                        case R.id.imgVwPreguntasNo:&lt;br /&gt;
                                                Toast.makeText(getApplicationContext(), &amp;quot;Soltaches en NO&amp;quot;, Toast.LENGTH_SHORT).show();&lt;br /&gt;
                                                break;&lt;br /&gt;
                                        default:&lt;br /&gt;
                                               // FACEMOS VISIBLE A IMAXE DA PREGUNTA &lt;br /&gt;
                                               // Soltouse a imaxe no layout&lt;br /&gt;
                                                pregunta.setVisibility(View.VISIBLE);&lt;br /&gt;
                                                return false;&lt;br /&gt;
                                        }&lt;br /&gt;
 &lt;br /&gt;
                                        // FACEMOS VISIBLE A IMAXE PREGUNTA&lt;br /&gt;
                                        pregunta.setVisibility(View.VISIBLE);&lt;br /&gt;
                                        return true;&lt;br /&gt;
                                }&lt;br /&gt;
                                return false;&lt;br /&gt;
                        }&lt;br /&gt;
                };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Creamos o obxecto _OnDragListener.&lt;br /&gt;
&lt;br /&gt;
*Implementamos o método &amp;#039;&amp;#039;&amp;#039;onDrag(View arg0, DragEvent arg1)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Ten dous parámetros:&lt;br /&gt;
**Un view que é quen recibe o a vista a soltar&lt;br /&gt;
**un obxecto da clase DragEvent, que entre outras cousas nos podería servir para recoller a información que puidese acompañar á vista que arrastramos. Tamén serve para ver que acción se está realizando co elemento que se está arrastrando sobre a vista: &lt;br /&gt;
***Entrando no obxecto destino, saíndo, soltando, etc.&lt;br /&gt;
**Para saber o tipo de acción drag&amp;amp;drop que se produce, temos que usar o método &amp;#039;&amp;#039;&amp;#039;getAction()&amp;#039;&amp;#039;&amp;#039; da clase DragEvent.&lt;br /&gt;
****Seguindo os comentarios do código pódense ver posibles accións se están levando a cabo co obxecto que se está arrastrando.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Se o evento que se produce é o Drop (Soltar):if (arg1.getAction() == DragEvent.ACTION_DROP)&lt;br /&gt;
*Entón debemos executar o código que desexamos.&lt;br /&gt;
*Como temos un obxecto _OnDragListener para tódalas posibles vistas destinarias temos que comprobar en que vista se soltou a imaxe e actuar en consecuencia.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Observar como facemos visible a imaxe inicial da pregunta unha vez que imos saír do método().&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*O &amp;#039;&amp;#039;&amp;#039;return&amp;#039;&amp;#039;&amp;#039; é moi importante, xa que cando prememos sobre a pregunta para arrastrala, o S.O. manda unha mensaxe a todas as Views que poden recoller un &amp;quot;Drag&amp;quot; (no noso caso OK, NO) preguntando quen quere aceptar o view que se vai arrastrar. &lt;br /&gt;
*Se o procedemento onDrag devolve false, o S.O. non manda máis eventos a dito View, se devolve True si.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Caso práctico 2: Preguntas==&lt;br /&gt;
*Comezaremos creando un novo proxecto: &amp;#039;&amp;#039;&amp;#039;U3_21_Preguntas&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Neste caso baseándonos na aplicación anterior imos crear unha nova na que o sistema terá un array de preguntas (Verdadeiro/Falso) que amosara ao usuario de forma aleatoria.&lt;br /&gt;
*O usuario debe responder arrastrando a imaxe da pregunta cara a imaxe OK ou NO.&lt;br /&gt;
*A aplicación informará se a resposta é correcta ou non.&lt;br /&gt;
*Unha vez que se acaben as preguntas informarase desa situación.&lt;br /&gt;
[[Image:Android_2013_U3_21_Preguntas_01.jpg]]&lt;br /&gt;
[[Image:Android_2013_U3_21_Preguntas_02.jpg]]&lt;br /&gt;
*No exemplo respondeuse mal á pregunta da primeira imaxe.&lt;br /&gt;
*Na segunda imaxe xa se amosa unha nova pregunta e o informe da aplicación á nosa anterior resposta.&lt;br /&gt;
&lt;br /&gt;
===O XML do Layout===&lt;br /&gt;
&lt;br /&gt;
*Nas liñas 15-29 están os Elementos que van amosar as preguntas.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;15-29&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;LinearLayout xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;&lt;br /&gt;
    xmlns:tools=&amp;quot;http://schemas.android.com/tools&amp;quot;&lt;br /&gt;
    android:id=&amp;quot;@+id/LinearLayoutPreguntas&amp;quot;&lt;br /&gt;
    android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
    android:layout_height=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
    android:orientation=&amp;quot;vertical&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;TextView&lt;br /&gt;
        android:layout_width=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
        android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
        android:layout_gravity=&amp;quot;center&amp;quot;&lt;br /&gt;
        android:text=&amp;quot;Drag &amp;amp;amp; Drop: Preguntas&amp;quot;&lt;br /&gt;
        android:textSize=&amp;quot;22sp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;ScrollView&lt;br /&gt;
        android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
        android:layout_height=&amp;quot;0dp&amp;quot;&lt;br /&gt;
        android:layout_weight=&amp;quot;3&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;TextView&lt;br /&gt;
            android:id=&amp;quot;@+id/lblPregunta&amp;quot;&lt;br /&gt;
            android:layout_width=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
            android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
            android:layout_gravity=&amp;quot;center&amp;quot;&lt;br /&gt;
            android:gravity=&amp;quot;center_horizontal&amp;quot;&lt;br /&gt;
            android:text=&amp;quot;Aquí van as preguntas&amp;quot;&lt;br /&gt;
            android:textColor=&amp;quot;#00F&amp;quot;&lt;br /&gt;
            android:textSize=&amp;quot;26sp&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/ScrollView&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;ImageView&lt;br /&gt;
        android:id=&amp;quot;@+id/imgvwPreguntaArrastrar&amp;quot;&lt;br /&gt;
        android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
        android:layout_height=&amp;quot;0dp&amp;quot;&lt;br /&gt;
        android:layout_gravity=&amp;quot;center_horizontal&amp;quot;&lt;br /&gt;
        android:layout_weight=&amp;quot;1&amp;quot;&lt;br /&gt;
        android:contentDescription=&amp;quot;Imaxe pregunta arrastrar&amp;quot;&lt;br /&gt;
        android:src=&amp;quot;@drawable/question&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;RelativeLayout&lt;br /&gt;
        android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
        android:layout_height=&amp;quot;0dp&amp;quot;&lt;br /&gt;
        android:layout_weight=&amp;quot;2&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;ImageView&lt;br /&gt;
            android:id=&amp;quot;@+id/imgVwPreguntasNo&amp;quot;&lt;br /&gt;
            android:layout_width=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
            android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
            android:layout_alignParentRight=&amp;quot;true&amp;quot;&lt;br /&gt;
            android:layout_alignTop=&amp;quot;@+id/imgvwPreguntasOk&amp;quot;&lt;br /&gt;
            android:contentDescription=&amp;quot;Imaxe preguntas NO&amp;quot;&lt;br /&gt;
            android:src=&amp;quot;@drawable/no&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;ImageView&lt;br /&gt;
            android:id=&amp;quot;@+id/imgvwPreguntasOk&amp;quot;&lt;br /&gt;
            android:layout_width=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
            android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
            android:layout_alignParentLeft=&amp;quot;true&amp;quot;&lt;br /&gt;
            android:layout_centerVertical=&amp;quot;true&amp;quot;&lt;br /&gt;
            android:contentDescription=&amp;quot;Imaxe preguntas OK&amp;quot;&lt;br /&gt;
            android:src=&amp;quot;@drawable/ok&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/RelativeLayout&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Cógigo Java==&lt;br /&gt;
*Unha posible solución é a que se amosa a continuación.&lt;br /&gt;
&lt;br /&gt;
*Imos separar o código:&lt;br /&gt;
**Lóxica do programa por un lado&lt;br /&gt;
***Cando facemos unha aplicación, normalmente imos traballar con datos que temos que almacenar nalgún sitio. Na aplicación que estamos a desenvolver atopámonos coas preguntas. Todas as preguntas virán dunha táboa e teremos que recuperalas para amosalas ao usuario no xogo das preguntas.&lt;br /&gt;
***Para facer máis claro o proxecto, imos crear un paquete onde gardaremos estas clases &amp;#039;especiais&amp;#039;. Dentro de dito paquete teremos:&lt;br /&gt;
****A clase Pregunta que terá todo o necesario para gardar a información dunha pregunta (id, enunciado, unha variable booleana que indique cal é a resposta correcta, outra variable booleana que indique se a pregunta foi lida).&lt;br /&gt;
****Unha clase que sirva para gardar aquela información que teña que ver coa configuración do xogo e tamén que teña métodos que nos sirvan para o desenvolvemento do mesmo.&lt;br /&gt;
*****Gardar nun array o conxunto de preguntas que imos usar.&lt;br /&gt;
*****Un método que devolva unha pregunta que non fose lida do array anterior.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
**Activities polo outro&lt;br /&gt;
***Cando facemos unha aplicación, normalmente imos traballar con datos que temos que almacenar nalgún sitio. Na aplicación que estamos a desenvolver nos atopamos coas preguntas. Todas as preguntas virán dunha táboa e teremos que recuperalas para amosalas ao usuario no xogo das preguntas.&lt;br /&gt;
&lt;br /&gt;
*Imos crear un &amp;#039;&amp;#039;&amp;#039;Paquete&amp;#039;&amp;#039;&amp;#039; para albergar a lóxica da aplicación:&lt;br /&gt;
[[Image:Android_2013_U3_21_Preguntas_03.jpg]]&lt;br /&gt;
*Na imaxe podemos ver que no paquete &amp;#039;&amp;#039;&amp;#039;...loxica&amp;#039;&amp;#039;&amp;#039; hai dúas clases Java, &lt;br /&gt;
&lt;br /&gt;
*Para crear un paquete/clase: Co botón dereito sobre &amp;#039;&amp;#039;&amp;#039;/src&amp;#039;&amp;#039;&amp;#039; ou sobre o paquete indicar &amp;#039;&amp;#039;&amp;#039;New --&amp;gt; Class&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
[[Image:Android_2013_U3_21_Preguntas_04.jpg]]&lt;br /&gt;
*Cubrir os campos do paquete e do nome da nova clase.&lt;br /&gt;
&lt;br /&gt;
===Clase Pregunta===&lt;br /&gt;
*Conten os atributos que pode ter unha pregunta e os métodos Setter e Getter dos atributos, así como unha sobre escritura do método toString();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
package com.example.u3_21_preguntas.loxica;&lt;br /&gt;
&lt;br /&gt;
public class Pregunta {&lt;br /&gt;
	private int _id;&lt;br /&gt;
	private String enunciado;&lt;br /&gt;
	private boolean resposta;&lt;br /&gt;
	private boolean vista; //Almacena se a pregunta xa foi amosada ao usuario&lt;br /&gt;
&lt;br /&gt;
	public Pregunta(int id, String enunciado, boolean resposta) {&lt;br /&gt;
		this._id = id;&lt;br /&gt;
		this.enunciado = enunciado;&lt;br /&gt;
		this.resposta = resposta;&lt;br /&gt;
		vista = false;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public long get_id() {&lt;br /&gt;
		return _id;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void set_id(int _id) {&lt;br /&gt;
		this._id = _id;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public String getEnunciado() {&lt;br /&gt;
		return enunciado;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void setEnunciado(String enunciado) {&lt;br /&gt;
		this.enunciado = enunciado;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public boolean isResposta() {&lt;br /&gt;
		return resposta;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void setResposta(boolean resposta) {&lt;br /&gt;
		this.resposta = resposta;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public boolean isVista() {&lt;br /&gt;
		return vista;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void setVista(boolean vista) {&lt;br /&gt;
		this.vista = vista;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public String toString() {&lt;br /&gt;
		return enunciado;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Clase LoxicaXogoPreguntas===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;8,10,15&amp;quot; &amp;gt;&lt;br /&gt;
package com.example.u3_21_preguntas.loxica;&lt;br /&gt;
&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.Random;&lt;br /&gt;
&lt;br /&gt;
public class LoxicaXogoPreguntas {&lt;br /&gt;
&lt;br /&gt;
	public static ArrayList&amp;lt;Pregunta&amp;gt; preguntas = new ArrayList&amp;lt;Pregunta&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
	public static int xerarAleatorio(int min, int max) {&lt;br /&gt;
		Random aleat = new Random();&lt;br /&gt;
		return (aleat.nextInt(max - min) + min);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public static Pregunta obterNovaPregunta() {&lt;br /&gt;
&lt;br /&gt;
		boolean quedan = false;&lt;br /&gt;
		for (Pregunta pregunta : preguntas) {&lt;br /&gt;
			if (!pregunta.isVista()) {&lt;br /&gt;
				quedan = true;&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		if (!quedan)&lt;br /&gt;
			return null;&lt;br /&gt;
&lt;br /&gt;
		int aleaotorio = xerarAleatorio(0, preguntas.size());&lt;br /&gt;
		Pregunta pregunta;&lt;br /&gt;
		do {&lt;br /&gt;
			pregunta = preguntas.get(aleaotorio);&lt;br /&gt;
			aleaotorio = xerarAleatorio(0, preguntas.size());&lt;br /&gt;
		} while (pregunta.isVista());&lt;br /&gt;
		return pregunta;&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liña 8&amp;#039;&amp;#039;&amp;#039;: preguntas como un array de obxectos de tipo Pregunta.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Método xerarAleatorio()&amp;#039;&amp;#039;&amp;#039;: devolve un número aleatorio entre un mínimo e un máximo&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Método obterNovaPregunta()&amp;#039;&amp;#039;&amp;#039;: Revisa no array se quedan preguntas sen amosar e se é asi busca unha nova aleatoriamente e devolve esa Pregunta a que lle pedira unha pregunta nova&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Clase Activity Preguntas===&lt;br /&gt;
*Importamos as 2 clases anteriores (Liñas 15,16)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;15,16,19,26,71,75,100,117,130&amp;quot; &amp;gt;&lt;br /&gt;
package com.example.u3_21_preguntas;&lt;br /&gt;
&lt;br /&gt;
import android.app.Activity;&lt;br /&gt;
import android.os.Bundle;&lt;br /&gt;
import android.view.DragEvent;&lt;br /&gt;
import android.view.Menu;&lt;br /&gt;
import android.view.View;&lt;br /&gt;
import android.view.View.DragShadowBuilder;&lt;br /&gt;
import android.view.View.OnLongClickListener;&lt;br /&gt;
import android.view.ViewGroup;&lt;br /&gt;
import android.widget.ImageView;&lt;br /&gt;
import android.widget.TextView;&lt;br /&gt;
import android.widget.Toast;&lt;br /&gt;
&lt;br /&gt;
import com.example.u3_21_preguntas.loxica.LoxicaXogoPreguntas;&lt;br /&gt;
import com.example.u3_21_preguntas.loxica.Pregunta;&lt;br /&gt;
&lt;br /&gt;
public class U3_21_Preguntas extends Activity {&lt;br /&gt;
	Pregunta preguntaActual = null;&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;
		super.onCreate(savedInstanceState);&lt;br /&gt;
		setContentView(R.layout.activity_u3_21__preguntas);&lt;br /&gt;
&lt;br /&gt;
		crearPreguntas();&lt;br /&gt;
		xestionarArrastrar();&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	private void xestionarArrastrar() {&lt;br /&gt;
		ImageView pregunta = (ImageView) findViewById(R.id.imgvwPreguntaArrastrar);&lt;br /&gt;
&lt;br /&gt;
		// Xestionamos cando prememos durante un tempo maior a 1 seg.&lt;br /&gt;
		pregunta.setOnLongClickListener(new OnLongClickListener() {&lt;br /&gt;
&lt;br /&gt;
			@Override&lt;br /&gt;
			public boolean onLongClick(View v) {&lt;br /&gt;
				// TODO Auto-generated method stub&lt;br /&gt;
				DragShadowBuilder sombra = new DragShadowBuilder(v);&lt;br /&gt;
				v.startDrag(null, sombra, null, 0);&lt;br /&gt;
				v.setVisibility(View.INVISIBLE);&lt;br /&gt;
				return true;&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
&lt;br /&gt;
		View.OnDragListener _OnDragListener = new View.OnDragListener() {&lt;br /&gt;
&lt;br /&gt;
			@Override&lt;br /&gt;
			public boolean onDrag(View arg0, DragEvent arg1) {&lt;br /&gt;
				ImageView pregunta = (ImageView) findViewById(R.id.imgvwPreguntaArrastrar);&lt;br /&gt;
&lt;br /&gt;
				// Este método vaise chamar 3 veces: ao soltar a imaxe pregunta&lt;br /&gt;
				// ou na imaxe OK&lt;br /&gt;
				// ou na imaxe NO&lt;br /&gt;
                                // ou Layout&lt;br /&gt;
				if (arg1.getAction() == DragEvent.ACTION_DRAG_STARTED) {&lt;br /&gt;
&lt;br /&gt;
					return true; // Aceptamos xestionar os eventos&lt;br /&gt;
				}&lt;br /&gt;
				if (arg1.getAction() == DragEvent.ACTION_DRAG_ENTERED) {&lt;br /&gt;
				}&lt;br /&gt;
				if (arg1.getAction() == DragEvent.ACTION_DRAG_EXITED) {&lt;br /&gt;
				}&lt;br /&gt;
				if (arg1.getAction() == DragEvent.ACTION_DROP) { &lt;br /&gt;
                                         // Soltamos a imaxe pregunta&lt;br /&gt;
&lt;br /&gt;
					// COMPROBAMOS EN QUE IMAXE SE SOLTOU: ok, no ou layout&lt;br /&gt;
					switch (arg0.getId()) {&lt;br /&gt;
					case R.id.imgvwPreguntasOk:&lt;br /&gt;
						comprobarPregunta(true);&lt;br /&gt;
&lt;br /&gt;
						break;&lt;br /&gt;
					case R.id.imgVwPreguntasNo:&lt;br /&gt;
						comprobarPregunta(false);&lt;br /&gt;
						break;&lt;br /&gt;
					default:&lt;br /&gt;
						pregunta.setVisibility(View.VISIBLE);&lt;br /&gt;
						return false;&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
					// FACEMOS VISIBLE A IMAXE PREGUNTA&lt;br /&gt;
					pregunta.setVisibility(View.VISIBLE);&lt;br /&gt;
					return true;&lt;br /&gt;
				}&lt;br /&gt;
				return false;&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Asociamos os obxectos ImageView e Layout á interface definida antes.&lt;br /&gt;
		ImageView imgOk = (ImageView) findViewById(R.id.imgvwPreguntasOk);&lt;br /&gt;
		ImageView imgNo = (ImageView) findViewById(R.id.imgVwPreguntasNo);&lt;br /&gt;
		ViewGroup pantalla = (ViewGroup) findViewById(R.id.LinearLayoutPreguntas);&lt;br /&gt;
&lt;br /&gt;
		imgNo.setOnDragListener(_OnDragListener);&lt;br /&gt;
		imgOk.setOnDragListener(_OnDragListener);&lt;br /&gt;
		pantalla.setOnDragListener(_OnDragListener);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	private void cambiarPregunta() {&lt;br /&gt;
		Pregunta preguntaSeguinte = LoxicaXogoPreguntas.obterNovaPregunta();&lt;br /&gt;
		if (preguntaSeguinte == null) {&lt;br /&gt;
			Toast.makeText(getApplicationContext(), &amp;quot;Non hai máis preguntas&amp;quot;, Toast.LENGTH_LONG).show();&lt;br /&gt;
			preguntaActual = null;&lt;br /&gt;
		} else {&lt;br /&gt;
&lt;br /&gt;
			preguntaActual = preguntaSeguinte;&lt;br /&gt;
			preguntaActual.setVista(true);&lt;br /&gt;
&lt;br /&gt;
			TextView texto = (TextView) findViewById(R.id.lblPregunta);&lt;br /&gt;
&lt;br /&gt;
			texto.setText(preguntaActual.getEnunciado());&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	private void crearPreguntas() {&lt;br /&gt;
		// Creamos tres preguntas e metémolas no array de preguntas&lt;br /&gt;
		Pregunta pregunta1 = new Pregunta(0, &amp;quot;Está o sol cerca ?&amp;quot;, false);&lt;br /&gt;
		Pregunta pregunta2 = new Pregunta(1, &amp;quot;É a lúa un satélite ?&amp;quot;, true);&lt;br /&gt;
		Pregunta pregunta3 = new Pregunta(2, &amp;quot;A velocidade da luz é de 300.000 km/seg ?&amp;quot;, true);&lt;br /&gt;
&lt;br /&gt;
		LoxicaXogoPreguntas.preguntas.add(pregunta1);&lt;br /&gt;
		LoxicaXogoPreguntas.preguntas.add(pregunta2);&lt;br /&gt;
		LoxicaXogoPreguntas.preguntas.add(pregunta3);&lt;br /&gt;
&lt;br /&gt;
		cambiarPregunta();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	private void comprobarPregunta(boolean resposta) {&lt;br /&gt;
		if (preguntaActual.isResposta() == resposta)&lt;br /&gt;
			Toast.makeText(getApplicationContext(), &amp;quot;Parabéns acertaches&amp;quot;, Toast.LENGTH_SHORT).show();&lt;br /&gt;
&lt;br /&gt;
		else&lt;br /&gt;
			Toast.makeText(getApplicationContext(), &amp;quot;Hmmm! Fallaches&amp;quot;, Toast.LENGTH_SHORT).show();&lt;br /&gt;
&lt;br /&gt;
		cambiarPregunta();&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public boolean onCreateOptionsMenu(Menu menu) {&lt;br /&gt;
		// Inflate the menu; this adds items to the action bar if it is present.&lt;br /&gt;
		getMenuInflater().inflate(R.menu.u3_21__preguntas, menu);&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liña 19&amp;#039;&amp;#039;&amp;#039;: creamos unha variable preguntaActual para saber que pregunta estamos procesando.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liña 26&amp;#039;&amp;#039;&amp;#039;: Chamamos ao método para crear as preguntas&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liñas 117...: Método crearPreguntas&amp;#039;&amp;#039;&amp;#039;: Creamos as preguntas e engadímolas ao array de Preguntas. Cando finalicemos de crear as preguntas chamamos ao método que vaia cambiando as preguntas que se van amosando.&lt;br /&gt;
**O ideal sería traballar con ficheiros ou unha BD como se verá máis adiante.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liñas 100...: Método cambiarPreguntas&amp;#039;&amp;#039;&amp;#039;: busca a pregunta seguinte, se non hai máis preguntas saca un aviso, en caso contrario amosa en pantalla a nova pregunta.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liñas 130...: Método comprobarPregunta&amp;#039;&amp;#039;&amp;#039;: é chamado cando se solta a imaxe da pregunta nunha das imaxes (OK/NO).&lt;br /&gt;
**Recibe como parámetro true/false en función do botón no que fose soltada a imaxe.&lt;br /&gt;
**Compárase a resposta dada coa resposta gardada na pregunta e actúase en consecuencia ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; -- [[Usuario:angelfg|Ángel D. Fernández González]] e [[Usuario:Carrion|Carlos Carrión Álvarez]] -- (2013).&lt;/div&gt;</summary>
		<author><name>Carrion</name></author>
	</entry>
</feed>