Android:如何通过标记或ID识别ImageView

时间:2013-05-13 20:54:36

标签: android touch imageview move

我的活动有几个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();

2 个答案:

答案 0 :(得分:1)

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

例如:

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

您也可以查看this page以了解更多关于使用ChoiceDragListener进行拖放的内容。

答案 1 :(得分: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并在屏幕上移动它们。希望它有所帮助!