【问题标题】:android drop the dragged object onto another objectandroid将拖动的对象放到另一个对象上
【发布时间】:2013-06-05 10:23:04
【问题描述】:

我正在测试我的拖放式安卓游戏。我得到了拖动的东西,但我希望将拖动的对象(imageview)拖放到另一个 imageview 上(在我的代码中我使用 objBasket)

这是我目前尝试过的代码:

  mainLayout = (AbsoluteLayout) findViewById(R.id.mainLayout);

    mainLayout.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            Log.i("touch", "touched here" + event);

            if(status == 1) // any event from down and move
            {
                LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,
                        (int)event.getX()-iv.get(0).getWidth()/2,
                        (int)event.getY()-iv.get(0).getHeight()/2);
                iv.get(0).setLayoutParams(lp);

            } else if(status == 2){
                    LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,
                            (int)event.getX()-iv.get(1).getWidth()/2,
                            (int)event.getY()-iv.get(1).getHeight()/2);
                    iv.get(1).setLayoutParams(lp);
            } else if(status == 3){
                LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,
                        (int)event.getX()-iv.get(2).getWidth()/2,
                        (int)event.getY()-iv.get(2).getHeight()/2);
                iv.get(2).setLayoutParams(lp);
            } else if(status == 4){
                LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,
                        (int)event.getX()-iv.get(3).getWidth()/2,
                        (int)event.getY()-iv.get(3).getHeight()/2);
                iv.get(3).setLayoutParams(lp);
            }


            if(event.getAction() == MotionEvent.ACTION_UP){
                status = 0;

                iv.get(0).setBackgroundColor(Color.TRANSPARENT);
                iv.get(1).setBackgroundColor(Color.TRANSPARENT);
                iv.get(2).setBackgroundColor(Color.TRANSPARENT);
                iv.get(3).setBackgroundColor(Color.TRANSPARENT);
            } else if (event.getAction() == MotionEvent.ACTION_DOWN){
                status = 0;



            }
            return true;
        }
    });

我的问题是我应该在 MotionEvent.ACTION_DOWN 中使用什么方法?我对拖放东西有点陌生,所以请原谅。这里有人做过同样的事情吗?请给我建议或示例代码。提前致谢!

【问题讨论】:

  • 向下移动时,您应该使用您的点 (x, y) 是否属于下面的一些图像,或者您可以查看它们中的两个是否与其绑定的矩形相交
  • @MarkoLazić 谢谢你的问题,你有示例代码让我开始吗?谢谢

标签: java android drag-and-drop imageview


【解决方案1】:

这是我检查两个视图矩形边界是否相交的一种方式

private boolean checkHit(View v, View hit){
    Rect rv = new Rect(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
    Rect rhit = new Rect(hit.getLeft(), hit.getTop(), hit.getRight(), hit.getBottom());
    return rv.intersect(rhit);
}

这个点是否属于

private boolean checkHit(MotionEvent event, View hit){      
    Rect rhit = new Rect(hit.getLeft(), hit.getTop(), hit.getRight(), hit.getBottom());
    return rhit.contains((int)event.getRawX(), (int)event.getRawY());
}

然后,只需浏览您感兴趣的观点并...

编辑: 像这样调用你的 ACTION_UP 部分,我在 if 语句中的 switch case 中做了这个

case MotionEvent.ACTION_UP:         
            drop(v, event);
        break;

和丢弃方法

private void drop(View v, MotionEvent event){
   checkHit(v, view2beHit);
   checkHit(event, view2beHit);
   // Do some for looping, do some other magic, do what you want
}

希望这对您有所帮助并享受您的工作。

【讨论】:

  • 您好,对不起,我仍然不明白我将在哪里嵌入此代码?
  • view2behit 和 viewtohit 时我可以设置它们相同的绝对位置吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
  • 2020-01-10
  • 1970-01-01
  • 2013-02-19
相关资源
最近更新 更多