2013-10-24 14 views
5

Sono nuovo ad Android. Il codice presente può trascinare e rilasciare più viste immagine su un singolo ImageView, ma non sono in grado di rilasciarle su più viste immagine. Gentilmente aiuto come in come posso modificare il mio codice o qualsiasi altro codice esistente.Come posso trascinare e rilasciare più visualizzazioni di immagini su altre immagini. Android

MainActivity.java

package n.f.letters; 

import android.app.Activity; 
import android.graphics.Rect; 
import android.graphics.drawable.Drawable; 
import android.os.Bundle; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 
import android.view.ViewGroup; 
import android.view.ViewGroup.LayoutParams; 
import android.view.Window; 
import android.view.WindowManager; 
import android.widget.ImageView; 
import android.widget.RelativeLayout; 

public class MainActivity extends Activity implements OnTouchListener { 
    /** Called when the activity is first created. */ 
    private View selected_item = null; 
    private int offset_x = 0; 
    private int offset_y = 0; 
    Boolean touchFlag=false; 
    boolean dropFlag=false; 
    LayoutParams imageParams; 
    ImageView imageDrop,image1,image2,image3,image4; 
    int crashX,crashY; 
    Drawable dropDrawable,selectDrawable; 
    Rect dropRect,selectRect; 
    int topy,leftX,rightX,bottomY; 

    int dropArray[]; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     setContentView(R.layout.activity_main); 
     ViewGroup container = (ViewGroup) findViewById(R.id.container); 
     imageDrop=(ImageView) findViewById(R.id.ImgDrop);  
     image1=(ImageView) findViewById(R.id.img1); 
     image2=(ImageView) findViewById(R.id.img2); 
     image3=(ImageView) findViewById(R.id.img3); 
     image4=(ImageView) findViewById(R.id.img4); 
     container.setOnTouchListener(new View.OnTouchListener() 
     { 
      public boolean onTouch(View v, MotionEvent event) 
      { 
       if(touchFlag==true) 
       { 
        switch (event.getActionMasked()) 
        { 
        case MotionEvent.ACTION_DOWN : 

         topy=imageDrop.getTop(); 
         leftX=imageDrop.getLeft(); 
         rightX=imageDrop.getRight(); 
         bottomY=imageDrop.getBottom(); 

         //opRect. 
         break; 
        case MotionEvent.ACTION_MOVE: 
         crashX=(int) event.getX(); 
         crashY=(int) event.getY(); 


         int x = (int) event.getX() - offset_x; 
         int y = (int) event.getY()- offset_y;           

         int w = getWindowManager().getDefaultDisplay().getWidth() - 50; 
         int h = getWindowManager().getDefaultDisplay().getHeight() - 10; 
         if (x > w) 
          x = w; 
         if (y > h) 
          y = h;      
         RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(new ViewGroup.MarginLayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT)); 
         lp.setMargins(x, y, 0, 0);     

         //Drop Image Here      
         if(crashX > leftX && crashX < rightX && crashY > topy && crashY < bottomY)      
         {       
          Drawable temp=selected_item.getBackground();        
          imageDrop.setBackgroundDrawable(temp); 
          imageDrop.bringToFront();       
          dropFlag=true; 
          selected_item.setVisibility(View.INVISIBLE); 
         } 
         //Drop Image Here      
         selected_item.setLayoutParams(lp); 
         break; 
        case MotionEvent.ACTION_UP: 
         //      
         touchFlag=false; 
         if(dropFlag==true) 
         { 
          dropFlag=false; 
         } 
         else 
         { 
          selected_item.setLayoutParams(imageParams); 
         }      
         break; 
        default: 
         break; 
        } 
       }else 
       { 
        System.err.println("Display Else Part ::->"+touchFlag); 
       }    
       return true; 
      } 
     }); 

     image1.setOnTouchListener(this); 
     image2.setOnTouchListener(this); 
     image3.setOnTouchListener(this); 
     image4.setOnTouchListener(this); 
    } 

    public boolean onTouch(View v, MotionEvent event) 
    { 
     switch (event.getActionMasked()) 
     { 
     case MotionEvent.ACTION_DOWN: 
      touchFlag=true; 
      offset_x = (int) event.getX(); 
      offset_y = (int) event.getY(); 
      selected_item = v; 
      imageParams=v.getLayoutParams(); 
      break; 
     case MotionEvent.ACTION_UP: 
      selected_item=null; 
      touchFlag=false; 
      break; 
     default: 
      break; 
     }  
     return false; 
    } 
} 

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/container" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<ImageView 
    android:id="@+id/ImgDrop" 
    android:layout_width="60dp" 
    android:layout_height="60dp" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
    android:background="#FFF123" /> 

<ImageView 
    android:id="@+id/img4" 
    android:layout_width="60dp" 
    android:layout_height="60dp" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" 
    android:layout_marginRight="75dp" 
    android:layout_marginTop="61dp" 
    android:background="@drawable/ic_launcher" /> 

<ImageView 
    android:id="@+id/img3" 
    android:layout_width="60dp" 
    android:layout_height="60dp" 
    android:layout_alignTop="@+id/img4" 
    android:layout_toRightOf="@+id/ImgDrop" 
    android:background="@drawable/ic_launcher" /> 

<ImageView 
    android:id="@+id/img2" 
    android:layout_width="60dp" 
    android:layout_height="60dp" 
    android:layout_alignRight="@+id/ImgDrop" 
    android:layout_alignTop="@+id/img3" 
    android:layout_marginRight="23dp" 
    android:background="@drawable/ic_launcher" /> 

<ImageView 
    android:id="@+id/img1" 
    android:layout_width="60dp" 
    android:layout_height="60dp" 
    android:layout_alignTop="@+id/img2" 
    android:layout_marginRight="40dp" 
    android:layout_toLeftOf="@+id/img2" 
    android:background="@drawable/ic_launcher" /> 

+1

C'è qualche altra soluzione. Quindi per favore fatemelo sapere. Sono bloccato con questo per molto tempo. –

+0

grazie, la tua domanda ha reso la mia soluzione :) –

+0

Mi chiedo, perché non hai usato il framework Android Drag and Drop? –

risposta

0

Drag and Drop Con il quadro drag/drop Android, è possibile consentire agli utenti di spostare i dati da una vista all'altra Visualizza nel layout corrente utilizzando un gesto di trascinamento della selezione grafico. Il framework include una classe di eventi di trascinamento, trascina listener e metodi e classi di supporto.

Sebbene il framework sia progettato principalmente per lo spostamento dei dati, è possibile utilizzarlo per altre azioni dell'interfaccia utente. Ad esempio, puoi creare un'app che mischia i colori quando l'utente trascina un'icona a colori su un'altra icona. Il resto di questo argomento, tuttavia, descrive il framework in termini di movimento dei dati. link see

Problemi correlati