Android拖放

时间:2010-11-12 07:19:31

标签: android

这里我创建了一个可拖动的imageview。这是我的示例代码(未给出完整代码)

public class mainClass extends Activity 
{     
    MyView obj1,obj2;   
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        AbsoluteLayout layout = new AbsoluteLayout(LearnKid.this);

        layout.setLayoutParams(new AbsoluteLayout.LayoutParams(
                                   LayoutParams.WRAP_CONTENT,
                       LayoutParams.WRAP_CONTENT,0,0));
        obj1 = new MyView(this);
        obj2 = new MyView(this);

        layout.addView(obj1);
        layout.addView(obj2);

        setContentView(layout);

    }
}
class MyView extends ImageView 
{
    public MyView(Context context)
     {

           super(context);
    }
     public boolean dispatchTouchEvent(MotionEvent event) 
     {
        center_X= (int)event.getRawX();
        center_Y = (int)event.getRawY();
        this.setLayoutParams(new AbsoluteLayout.LayoutParams(AbsoluteLayout.LayoutParams.WRAP_CONTENT,
                    AbsoluteLayout.LayoutParams.WRAP_CONTENT,center_X-10,center_Y-(70)));
    }
}

这里我得到2个单独的图像视图,也可以拖动。 但是我如何检查第一张图像是否越过第二张图像。 因为在那一点上我想停止可拖动的选项。

Plz帮助

提前完成......

2 个答案:

答案 0 :(得分:0)

我将为此提供初始逻辑。您必须获取要检查的项目的位置,并比较拖动的项目x或y坐标(或两者都取决于您想要实现的目标)是否已通过第二项x和/或y坐标。您需要对笛卡尔坐标系有基本的了解。

这可以在拖动逻辑中实现,也可以在释放对象时实现(从手指中取出)。

现在只是为了清除别的东西。您使用AbsoluteLayout有什么特殊原因吗?如果没有,那么请不要使用它,因为它已被弃用,不鼓励使用它。

答案 1 :(得分:0)

AABB轴对齐边界框

每次要更新位置和被拖动的框时,都要测试它们是否重叠

你可以尝试适应这个

axmin = gofd.getPosition().x-gofd.getObjectSize().x/2f;
    axmax = gofd.getPosition().x+gofd.getObjectSize().x/2f;
    aymin = gofd.getPosition().y-gofd.getObjectSize().y/2f;
    aymax = gofd.getPosition().y+gofd.getObjectSize().y/2f;
    Enumeration<Integer> e2 = myHash.getKeys();
    while( e2. hasMoreElements() ){
        GameObject toDraw = myHash.getGameObjectForID(e2.nextElement());
        if(toDraw != null){
            bymax = toDraw.getPosition().y+toDraw.getObjectSize().y/2f;
                bymin = toDraw.getPosition().y-toDraw.getObjectSize().y/2f;
                bxmin = toDraw.getPosition().x-toDraw.getObjectSize().x/2f;
                bxmax = toDraw.getPosition().x+toDraw.getObjectSize().x/2f;
                if(!(axmax<bxmin || bxmax <axmin || aymax<bymin || bymax <aymin)){
                    return true;
                }
            }
        }
    }

gofd =游戏对象手指拖动

这是我游戏的旧版本的代码片段

myHash包含对我正在使用的图像数据表的引用,但它不应该远离你需要的