0

我的活动中有几个 ImageView,用户可以在屏幕上移动。如何确定用户实际选择了哪个 ImageView?在 Xcode 中,我可以为每个 ImageView 分配一个唯一的标签,然后 onTouch 获得标签号。Android上有类似的方法吗?

这是 Xcode:

UITouch *touch = [[event allTouches] anyObject];

if ([touch view].tag == 901)
{
    iTouchObject = 901;    
    [self.view bringSubviewToFront:imgRojo1];
}    

在 Android Activity 中我到目前为止已经完成:在 onCreate 我可以为每个 ImageView 分配一个 ID

    ImageView selImage = (ImageView)findViewById(R.id.i904); 
    selImage.setId(904);

在 onTouch.MOVED 中,我可以使用带有直接分配 ID 的 ImageView。在这种情况下,图像在屏幕上手指下方平滑移动。

    iID = 904;
    ImageView selImage = (ImageView)findViewById(iID); 

但是,如何从用户触摸的 ImageView 中获取 ID?

我曾尝试使用 setOnTouchListener:

    ImageView selImage = (ImageView)findViewById(R.id.i904); 
    selImage.setId(904);
    selImage.setOnTouchListener(new View.OnTouchListener() {         

        @Override
        public boolean onTouch(View v, MotionEvent event) {
        iID = v.getId();
        ImageView selImage = (ImageView)findViewById(iID); 

        int eventaction = event.getAction();     
        int X = (int)event.getX();
        int Y = (int)event.getY();
        switch (eventaction ) {
        case MotionEvent.ACTION_DOWN: // touch down so check if the finger is on a ball   
             break;
         case MotionEvent.ACTION_MOVE:   // touch drag with the ball 
                // move the balls the same as the finger 
             selImage.setX(X-25);
             selImage.setY(Y-25);
             break;
        case MotionEvent.ACTION_UP: 
                // touch drop - just do things here after dropping
             break;
        }
        // redraw the canvas
        return true;
     }});

通过这个,我可以选择每个 ImageView 并移动它,但是,它不会平滑移动,并且 ImageView 在屏幕上被复制。

是否有可能在 onTouch.MOVED 视图中获取第一种情况并使用它来获取 ID:iID = v.getId();

4

2 回答 2

2

您可以检查当前视图的 id 并将其与实际资源 ID 进行比较。

例如:

switch (v.getId()) {
case R.id.image1:
    // Do this
    break;
case R.id.image2:
    // ..
    break;
case R.id.image3:
    // ..
    break;
}

您也可以查看此页面以了解更多关于拖放的信息ChoiceDragListener

于 2013-05-13T21:42:26.970 回答
1

更新:

我找到了一个解决方案,也许不是最好的优化,但工作得很好。希望它可以帮助遇到类似情况的其他人:

对于每个 ImageView,我都分配了一个 ID (setID) 和 setOnTouchListener。我在 setOnTouchListener 中所做的唯一一件事就是分配一个与我用于 ID 相同的数字的整数。重要的是设置 RETURN FALSE,这将停止 setOnTouchListener。

    ImageView selImage = (ImageView)findViewById(R.id.i904); 
    selImage.setId(904);
    selImage.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
        iID = 904;
            return false;
        }
    });

我已经添加了以下 onTouchEvent()。这里的第一件事是选择具有之前在整数中设置的 ID 的 ImageView。

public boolean onTouchEvent(MotionEvent event) {
    ImageView selImage = (ImageView)findViewById(iID); 
        int eventaction = event.getAction();     
        int X = (int)event.getX();
        int Y = (int)event.getY();
        switch (eventaction ) {
        case MotionEvent.ACTION_DOWN:   
             break;
         case MotionEvent.ACTION_MOVE:    
             selImage.setX(X-25);
             selImage.setY(Y-25);
             break;
        case MotionEvent.ACTION_UP: 
             break;
        }
        return true;
     }

现在我可以触摸任何 ImageView 并在屏幕上移动它们。希望能帮助到你!

于 2013-05-13T23:21:58.027 回答