2 u013169022 u013169022 于 2016.02.04 15:21 提问

android luancher 拖动问题

需求是根据luancher源码,然后去掉主菜单,吧所有的app显示在桌面上。
public class Launcher extends Activity implements DragSource,DragScroller,AllAppsPaged.InitDragScoller,DropTarget,DragController.DragListener

private void setupViews()
{
    final DragController dragController = mDragController;

    mDragLayer = (DragLayer)findViewById(R.id.drag_layer);
    m_allApps = (AllAppsPaged)findViewById(R.id.launcher);

    mDragLayer.setup(this, dragController);
    m_allApps.setHapticFeedbackEnabled(false);
    // Setup the workspace
    dragController.addDragListener(m_allApps);
    initDragScroller(dragController, m_allApps, mDragLayer);
}

    @Override
public void initDragScroller(DragController dragController, AllAppsPaged appsPaged, DragLayer dragLayer)
{
    dragController.setDragScoller(appsPaged);
    dragController.setScrollView(dragLayer);
    dragController.setMoveTarget(appsPaged);

    dragController.addDropTarget(appsPaged);
}

private DropTarget findDropTarget(int x, int y, int[] dropCoordinates)
{
    final Rect r = mRectTemp;

    final ArrayList<DropTarget> dropTargets = mDropTargets;
    final int count = dropTargets.size();
    for (int i = count - 1; i >= 0; i--)
    {
        DropTarget target = dropTargets.get(i);
        if (!target.isDropEnabled())
        {
            continue;
        }
        target.getHitRect(r);

        // Convert the hit rect to DragLayer coordinates
        target.getLocationInDragLayer(dropCoordinates);
        r.offset(dropCoordinates[0] - target.getLeft(), dropCoordinates[1] - target.getTop());

        mDragObject.x = x;
        mDragObject.y = y;
        if (r.contains(x, y))
        {
            DropTarget delegate = target.getDropTargetDelegate(mDragObject);
            if (delegate != null)
            {
                target = delegate;
                target.getLocationInDragLayer(dropCoordinates);
            }
            // Make dropCoordinates relative to the DropTarget
            dropCoordinates[0] = x - dropCoordinates[0];
            dropCoordinates[1] = y - dropCoordinates[1];
            return target;
        }
    }
    return null;
}

在findDropTarget这个函数中,一直返回null,请问是哪里的问题?

以上代码跟原生luancher唯一不同的就是就是setupviews的地方。
原生luancher的代码:
// Setup the drag controller (drop targets have to be added in reverse order in prioriyt)
    dragController.setDragScoller(mWorkspace);
    dragController.setScrollView(mDragLayer);
    dragController.setMoveTarget(mWorkspace);
    dragController.addDropTarget(mWorkspace);

1个回答

devmiao
devmiao   Ds   Rxr 2016.02.04 21:46
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Android开发自己的桌面应用,Luancher原来也是如此简单(上)
Android开发自己的桌面应用,Luancher , 如果有做Luancher的朋友,可以跟大家分享下。
Launcher3 拖动图标笔记
本文主要记录了Launcher3拖动时的流程和代码记录,在桌面图标拖动时会引起图标的重排,拖动时受影响的图标在文中由item或cell来表示。
Android中GridView拖拽的效果【手机icon位置交换】
最近看到联想,摩托罗拉等,手机launcher中有个效果,进入mainmenu后,里面的应用程序的图标可以拖来拖去,所以我也参照网上给的代码,写了一个例子。还是很有趣的,实现的流畅度没有人家的那么好,我只是模仿这种效果,我写的这个拖拽是两个图标之间进行交换,所以,当从一行的某个位置,换到下一行的另一列的时候,发现有好几个图标都改变位置了,因为是相邻两个交换位置,所以每经过相邻的图标的时候都改变位置
luancher android
实现lancher 别人网上的帖子觉得很好,刚学习希望和大家分享
【 Launcher客制化】luancher之学习综合 (最新4.4桌面单层双层切换)
(10)【 Launcher客制化】luancher之学习心得
Android4.2_Launcher_AndroidMainfest.xml
<!-- /* ** ** Copyright 2008, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License.
自定义可拖动GridView 仿android桌面launcher
自定义可拖动GridView 思路:1、长按视为开始拖动,根据poionToPosition()获取当前点击的itemView,并隐藏 2、调用windowManager.addView()添加当前itemView的镜像 3、在onTouchEvent中获取手指移动的moveX,moveY,不断重绘镜像 4、在相应位置更改item数据,直接调用adapter
Android5.0 源码分析--- Launcher启动应用的过程
Activity 启动过程 通过Luancher启动
Android&nbsp;系统默认参数的修改(一)
Android 系统默认参数的修改 写在前面的话 一般在新项目开始之初,我们需要针对客户需求进行各种系统默认属性的配置,通常这些属性都是通过build.prop、settings.db 、default.xml、一些功能package下的 config.xml 等来进行初始化配置的。 那么,要满足客户的定制需求,对于我们开发者来说,修改SettingsProvider默认值,而第一次开机时,
简单的横屏滚动安卓launcher,适合平板
简单的横屏滚动安卓launcher,适合平板