2015-04-02 19 views
8

Aggiornamento: per capire la mia domanda, qui è quello che ho bisogno di ottenere: Trascinare l'icona da App cassetto alla schermata iniziale (se possibile non in un GridView), come nel pic,trascinare le icone alla schermata iniziale

enter image description here

Vecchio (questo solo per imparare come funziona):

sto cercando di implementare trascinando le icone cliccabili da un ListView ad un customView senza contenitore (Listview or Gridview...) all'interno della stessa attività o di un altro, qui è una foto per farvi capire di più:

enter image description here

ma quando ho messo l'icona nella zona di destra io don 't vedere l'oggetto, nel registro vedo: I/ViewRootImpl﹕ Reporting drop result: true

enter image description here

qui il mio codice:

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; 
    } 
} 

mio file 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> 

... 

Eventuali informazioni o indicazioni (tutorial, documenti ...) sarebbe molto utile

+0

Cosa si sta facendo su questa riga LinearLayoutAbsListView newParent = (LinearLayoutAbsListView) v; , è v la vista con id pane3? In tal caso, come si imposta l'adattatore per questa vista quando non è definita una vista elenco per questa vista? – random

+0

no questo codice è con Listview solo per darti un'idea di cosa ho fatto –

+0

Ancora cosa è v in LinearLayoutAbsListView newParent = (LinearLayoutAbsListView) v; per quanto riguarda il tuo xml – random

risposta

2

Dai un'occhiata alla aggiunta di vista della WindowManager (WM). Quando si preme a lungo su un elemento da trascinare, creare la propria bitmap dell'elemento e aggiungerlo al WM, in modo che possa essere spostato senza vincoli di contorno. Quando ricevi un ACTION_UP o un evento equivalente, associa la tua x, y attuale alla vista che si trova direttamente sotto l'oggetto trascinato (le classi di Rect potrebbero essere utili). È quindi possibile aggiungere questo elemento a quella particolare vista.

+0

hi Jignesh, la prima volta in suvitato e grazie per averlo spiegato, sembra che tu abbia lavorato con Android Launcher, ora sto studiando il codice sorgente di "launcher3", Capisco la tua risposta ma non riesco a trovare dove (classe) hanno creato la bitmap e la aggiungiamo alla WM (sto cercando un esempio per iniziare). dal modo in cui ACTION_UP ... e la classe Rect sono molto utili. –