2013-10-24 5 views
5

Ich bin neu in Android. Der vorliegende Code kann mehrere Image-Ansichten auf ein einzelnes ImageView ziehen und ablegen, aber ich kann sie nicht auf mehrere Image-Ansichten ablegen. Bitte helfen Sie mir dabei, wie ich meinen Code oder irgendeinen anderen existierenden Code modifizieren kann.Wie kann ich mehrere Bildansichten über andere Bildansichten ziehen und ablegen

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

Gibt es eine andere Lösung? Dann lass es mich wissen. Ich bin ziemlich lange damit beschäftigt. –

+0

danke, Ihre Frage hat meine Lösung :) –

+0

Ich frage mich, warum haben Sie nicht das Android Drag & Drop-Framework? –

Antwort

0

Drag and Drop Mit dem Android Drag/Drop-Rahmen können Sie Ihren Benutzern erlauben, Daten zu bewegen Von einer Ansicht zur nächsten Zeigen Sie das aktuelle Layout mit einer grafischen Drag & Drop-Geste an. Das Framework enthält eine Drag-Ereignisklasse, Drag Listeners und Hilfsmethoden und -klassen.

Obwohl das Framework in erster Linie für die Datenverschiebung ausgelegt ist, können Sie es für andere UI-Aktionen verwenden. Sie können beispielsweise eine App erstellen, die Farben mischt, wenn der Benutzer ein Farbsymbol über ein anderes Symbol zieht. Der Rest dieses Themas beschreibt jedoch den Rahmen für die Datenbewegung. link see

Verwandte Themen