2013-10-24 9 views
5

Jestem nowy na Androida. Obecny kod może przeciągać i upuszczać wiele widoków obrazów na pojedynczym ImageView, ale nie jestem w stanie upuścić ich na wiele widoków. Prosimy o pomoc, jak w jaki sposób mogę zmodyfikować mój kod lub inny istniejący kod.Jak mogę przeciągać i upuszczać wiele widoków obrazu w porównaniu z innymi widokami obrazu 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

Czy istnieje inne rozwiązanie. Następnie daj mi znać. Utknąłem z tym przez dość długi czas. –

+0

dziękuję, twoje pytanie sprawiło, że moje rozwiązanie :) –

+0

Zastanawiam się, dlaczego nie skorzystałeś z platformy Android Drag and Drop? –

Odpowiedz

0

przeciągnij i upuść Z Androidem ramach drag/drop, można pozwolić użytkownikom na przenoszenie danych od jednego widoku do drugiego Widok w bieżącym układzie za pomocą graficznego gestu przeciągania i upuszczania. Struktura obejmuje klasę przeciągania, przeciąganie detektorów oraz pomocnicze metody i klasy.

Chociaż szkielet jest przeznaczony przede wszystkim do przenoszenia danych, można go użyć do innych działań interfejsu użytkownika. Możesz na przykład utworzyć aplikację, która łączy kolory, gdy użytkownik przeciągnie ikonę koloru na inną ikonę. Reszta tego tematu opisuje jednak ramy pod względem przepływu danych. link see

Powiązane problemy