2015-04-02 31 views
8

Aktualizacja: zrozumieć moje pytanie, o to co muszę osiągnąć: Przeciągnij ikonę z App szuflady do ekranu głównego (jeśli to możliwe nie w GridView) jak w pic,przeciągać ikony do ekranu głównego

enter image description here

Stary (tylko to, aby dowiedzieć się, jak to działa):

Próbuję zaimplementować przeciągając ikony z klikalne ListView do customView bez pojemnika (Listview or Gridview...) wewnątrz tej samej działalności lub innego, tutaj jest obraz, aby zrozumieć więcej:

enter image description here

ale kiedy umieścić ikonę w prawym obszarze I don „t zobaczyć obiekt, w dzienniku widzę: I/ViewRootImpl﹕ Reporting drop result: true

enter image description here

tutaj mój kod:

class MyDragListener implements View.OnDragListener { 
    @Override 
    public boolean onDrag(View v, DragEvent event) { 
     int action = event.getAction(); 
     switch (event.getAction()) { 
      ... 
      case DragEvent.ACTION_DROP: 
       LinearLayoutAbsListView itemo = (LinearLayoutAbsListView)findViewById(R.id.paneko); 
       View child = getLayoutInflater().inflate(R.layout.list_item, null); 
       itemo.addView(child); 
       break; 
      case DragEvent.ACTION_DRAG_ENDED: 
      default: 
       break; 
     } 
     return true; 
    } 
} 

Mój plik XML:

... 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="2" 
    android:background="@android:color/background_dark" 
    android:orientation="horizontal" > 

    <com.moapps.elfassimounir.simple.LinearLayoutAbsListView 
     android:id="@+id/paneuj" 
     android:background="@android:color/background_light" 
     android:orientation="vertical" 
     > 

     <ListView 
      android:id="@+id/listview1" 
      android:layout_width="100dp" 
      android:layout_height="wrap_content" /> 
    </com.moapps.elfassimounir.simple.LinearLayoutAbsListView> 

    <com.moapps.elfassimounir.simple.LinearLayoutAbsListView 
     android:id="@+id/paneko" 
     android:background="@android:color/background_light" 
     android:orientation="vertical" > 

    </com.moapps.elfassimounir.simple.LinearLayoutAbsListView> 
</LinearLayout> 

... 

Wszelkie informacje o lub odniesienia (tutoriale, dokumenty ...) byłoby bardzo pomocne

+0

Co robisz w tym wierszu? LinearLayoutAbsListView newParent = (LinearLayoutAbsListView) v; , jest v widok z identyfikatorem pane3? Jeśli tak, to jak ustawiasz adapter dla tego widoku, gdy nie ma zdefiniowanego widoku listy dla tego widoku? – random

+0

ten kod nie jest z Listview tylko po to, aby dać ci wyobrażenie o tym, co zrobiłem –

+0

Co to jest v w LinearLayoutAbsListView newParent = (LinearLayoutAbsListView) v; w odniesieniu do twojego xml – random

Odpowiedz

2

Wystarczy popatrzeć na dodanie widoku z managerem okien (WM). Po długim naciśnięciu elementu, który ma zostać przeciągnięty, utwórz własną mapę bitową tego elementu i dodaj go do WM, aby można było go przenosić bez ograniczeń granic widoku. Po otrzymaniu ACTION_UP lub równoważnego zdarzenia, zmapuj bieżące x, y do rzeczywistego widoku, który znajduje się bezpośrednio pod przeciągniętym przedmiotem (pomocne mogą być klasy Rect). Następnie możesz dodać ten element do tego widoku.

+0

Witaj Jignesh, pierwszy wznowiony i dzięki za wyjaśnienie tego, wydaje się, że pracowałeś z androidem launchera, teraz studiuję źródło kodu "launcher3", Rozumiem twoją odpowiedź, ale nie mogę znaleźć gdzie (klasy) oni stworzyli bitmapę i dodali ją do WM (szukam przykładu na początek). przy okazji ACTION_UP ... i klasa Rect są bardzo pomocne. –

Powiązane problemy