2010-12-14 9 views
7

Na ekranie głównym systemu Android możliwe jest usunięcie elementów poprzez przeciągnięcie ich do kosza.Jak uzyskać zachowanie ekranu głównego przeciągania do kosza w mojej aplikacji?

Chciałbym mieć podobną funkcjonalność w mojej własnej aplikacji, w której mam widok z niestandardowymi widokami, które chcę, aby użytkownik mógł być przeciągany i upuszczany.

Czy istnieje prosty sposób wdrożenia tej funkcji? A może ktoś dał mi wskazówki, które mogą mnie prowadzić na możliwie trudny sposób osiągnięcia tego?

+0

słodkie .. Chciałbym się dowiedzieć, jak to zrobić zbyt Pozwolę sobie zrobić kilka badań, które odezwę się, jeśli coś znajdę. – Shardul

+0

Nice! Mam teraz gotowy dowód działania. Jestem zainteresowany twoją implementacją. – Peterdk

+1

Aplikacja uruchamiająca w systemie Android, do której się odwołujesz, jest open source. Myślę, że możesz być w stanie uczyć się na ich implementacji, patrząc na kod źródłowy. http://android.git.kernel.org/?p=platform/packages/apps/Launcher.git;a=summary –

Odpowiedz

1

Zakładam, że masz aplikację podobną do ekranu głównego, co najmniej widok z elementami, które chcesz przeciągnąć i upuścić.

Podobnie jak Austyn Mahoney mówi w swoim komentarzu, można odwołać się do kodu domowego open source kodu głównego. Ale ponieważ funkcja przeciągnij i upuść jest łatwa do implementacji, możesz sobie z nią poradzić we własnym zakresie.

Potrzebujesz przedmiotów do przechowywania w np. array. Następnie przejdź przez typy zdarzeń.

Na każdym ACTION_DOWN należy sprawdzić, czy element został trafiony przez użytkownika. Na przykład. jeśli mamy kręgi jako elementy, musimy uchwycić bieżące współrzędne ACTION_DOWN, abyśmy mogli sprawdzić, czy znajdują się one wewnątrz elementu i uzyskać identyfikator elementu, który użytkownik zamierza przeciągnąć zgodnie ze współrzędnymi ACTION_DOWN.

Po ACTION_MOVE wystarczy przekazać bieżące współrzędne xiy do obiektu, aby przerysować je w nowej pozycji.

Cóż, to tylko funkcja przeciągnij i upuść. Teraz musisz przetestować, czy element znajduje się w określonym sektorze, który nazywasz pojemnikiem. Więc definiujesz prostokąt na ekranie. w ACTION_MOVE sprawdź, czy przedmiot znajduje się w tym obszarze, to wszystko.

Tylko niektóre przykładowy kod dla przeciągnij i upuść:

public boolean onTouchEvent(MotionEvent event){ 
    int itemID = 0; 
    int X = (int)event.getX(); 
    int Y = (int)event.getY(); 

     switch(event.getAction()){ 
      case MotionEvent.ACTION_DOWN: 
       for(Items item : dragable_item){ 

        //center coords of the item 
        int centerX = item.getX() + 25; 
        int centerY = item.getY() + 25; 

        //calculate the distance (radius) from touch to item 

        //get item to drag 
        if(distance < 20){ 
         itemId = item.getID(); break; 
        } 
       } 
      break; 
      case MotionEvent.ACTION_MOVE: 
       if(itemID > 0){ 
        Items[itemID-1].setX(X-25); 
        Items[itemID-1].setY(X-25); 
       } 
      break; 
     } 
    } 
    invalidate(); return true; 
} 

Jeśli różdżka kopać bardziej w kodzie spojrzeć anddev.org - drag and drop.

+0

Bardzo pouczająca odpowiedź. – Peterdk

Powiązane problemy