Перетащите значки на главный экран

Обновление: чтобы понять мой вопрос, вот что мне нужно сделать: перетащите значок из панели приложений на главный экран (если возможно не в виде сетки), как на картинке,

введите здесь описание изображения

Старый (это просто для того, чтобы узнать, как это работает):

Я пытаюсь реализовать перетаскивание интерактивных значков из ListView в customView без контейнера (Listview or Gridview...) внутри того же действия или другого, вот изображение, чтобы вы могли понять больше:

введите здесь описание изображения

но когда я помещаю значок в нужную область, я не вижу объект, в журнале я вижу: I/ViewRootImpl﹕ Reporting drop result: true

введите здесь описание изображения

вот мой код:

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

Мой 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>

 ...

Любая информация или ссылки (руководства, документы...) будут очень полезны


person Mounir Elfassi    schedule 02.04.2015    source источник
comment
Что вы делаете в этой строке LinearLayoutAbsListView newParent = (LinearLayoutAbsListView)v; , это вид с id pane3? Если да, то как вы настраиваете адаптер для этого представления, если для этого представления не определен список?   -  person random    schedule 02.04.2015
comment
нет, этот код связан со списком, чтобы дать вам представление о том, что я сделал   -  person Mounir Elfassi    schedule 02.04.2015
comment
Опять же, что такое v в LinearLayoutAbsListView newParent = (LinearLayoutAbsListView)v; относительно вашего xml   -  person random    schedule 02.04.2015
comment
да @random v - это представление с панелью id3   -  person Mounir Elfassi    schedule 02.04.2015
comment
можете ли вы подтвердить, добавлен ли passItem в destList, а newParent.absListView ссылается на список внутри панели 3?   -  person random    schedule 02.04.2015
comment
да, но у меня есть исключение   -  person Mounir Elfassi    schedule 02.04.2015
comment
но я получил исключение нулевого указателя из-за этой строки ItemBaseAdapter destAdapter = (ItemBaseAdapter)(newParent.absListView.getAdapter());   -  person Mounir Elfassi    schedule 02.04.2015
comment
@random я обновил свой вопрос, пожалуйста, взгляните   -  person Mounir Elfassi    schedule 03.04.2015


Ответы (1)


Взгляните на добавление представления в WindowManager (WM). Когда вы долго нажимаете на элемент, который нужно перетащить, создайте собственное растровое изображение этого элемента и добавьте его в WM, чтобы его можно было перемещать без ограничений границ просмотра. Когда вы получаете ACTION_UP или эквивалентное событие, сопоставьте ваши текущие x, y с фактическим представлением, которое находится непосредственно под перетаскиваемым элементом (могут быть полезны классы Rect). Затем вы можете добавить этот элемент в это конкретное представление.

person Jignesh Shah    schedule 15.04.2015
comment
привет, Джигнеш, сначала проголосовал, и спасибо за объяснение, похоже, вы работали с пусковой установкой Android, теперь я изучаю исходный код пусковой установки 3, я понимаю ваш ответ, но я не могу найти, где (класс) они создали растровое изображение и добавьте его в WM (я ищу пример для начала). кстати ACTION_UP... и класс Rect очень полезны. - person Mounir Elfassi; 17.04.2015