2013-10-24 7 views
5

나는 안드로이드를 처음 사용합니다. 현재 코드는 하나의 ImageView에 여러 이미지 뷰를 드래그 앤 드롭 할 수 있지만 여러 이미지 뷰에 드롭 할 수는 없습니다. 내 코드 또는 다른 기존 코드를 수정하는 방법을 설명하는 데 도움이됩니다.어떻게 다른 이미지 뷰 위로 여러 이미지 뷰를 드래그 앤 드롭 할 수 있습니까? 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

다른 해결책이 있습니까? 그럼 알려주세요. 나는 꽤 오랫동안 이것으로 붙어있다. –

+0

감사합니다. 내 솔루션으로 만든 질문 : –

+0

왜 안드로이드 드래그 앤 드롭 프레임 워크를 사용하지 않았습니까? –

답변

0

끌어 안드로이드 드래그/드롭 프레임 워크로 드롭, 당신은 사용자가 데이터를 이동할 수 있습니다 그래픽 드래그 앤 드롭 제스처를 사용하여 현재 레이아웃의 한 뷰에서 다른 뷰로 이동합니다. 프레임 워크에는 드래그 이벤트 클래스, 드래그 리스너 및 도우미 메서드와 클래스가 포함됩니다.

프레임 워크는 주로 데이터 이동을 위해 설계되었지만 다른 UI 작업에 사용할 수도 있습니다. 예를 들어 사용자가 다른 아이콘 위에 색상 아이콘을 드래그하면 색상을 혼합하는 앱을 만들 수 있습니다. 그러나이 주제의 나머지 부분에서는 데이터 이동 측면에서 프레임 워크를 설명합니다. link see