Как получить поведение перетаскивания на мусор на домашнем экране в моем собственном приложении? - PullRequest
7 голосов
/ 14 декабря 2010

На домашнем экране Android можно удалять элементы, перетаскивая их в корзину.

Мне бы хотелось иметь аналогичную функциональность в моем собственном приложении, где у меня есть вид с элементами пользовательского вида, которые я хочубыть перетаскиваемым пользователем.

Есть ли простой способ реализовать эту функцию?Или кто-нибудь может дать мне указатели, которые могут подсказать мне, возможно, трудный путь к достижению этого?

1 Ответ

1 голос
/ 19 января 2011

Я предполагаю, что у вас есть приложение, похожее на домашний экран, по крайней мере, представление с элементами, которые вы хотите перетащить и отпустить.

Как сказал Остин Махони в своем комментарии, вы можете сослаться на код домашнего экрана андроида с открытым исходным кодом . Но так как перетаскивание является простой в реализации функцией, вы можете справиться и с ней самостоятельно.

Ваши вещи должны храниться, например, в массив . Затем просмотрите типы событий.

На каждом ACTION_DOWN вам необходимо проверять, был ли предмет поражен пользователем. Например. если в качестве элементов у нас есть круги, нам нужно захватить текущие координаты ACTION_DOWN, чтобы мы могли проверить, находятся ли они внутри элемента, и получить идентификатор элемента, который пользователь собирается перетащить, в соответствии с координатами ACTION_DOWN.

Вкл. ACTION_MOVE Вам просто нужно передать текущие координаты x и y элементу, чтобы перерисовать его на новой позиции.

Ну, это просто функция перетаскивания. Теперь вам нужно проверить, находится ли элемент в определенном секторе, который вы называете bin. Таким образом, вы определяете прямоугольник на вашем экране. в ACTION_MOVE ваш тест на предмет попадания в эту область, вот и все.

Просто пример кода для перетаскивания:

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

Если вы хотите больше копаться в коде, взгляните на anddev.org - перетаскивайте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...