2013-05-13 75 views
0

我對我的活動有幾個ImageView,用戶可以在屏幕上移動。我如何識別用戶實際選擇哪個ImageView?在Xcode中,我可以爲每個ImageView分配一個唯一的標籤,並且比onTouch獲取標籤編號。 Android上有類似的方法嗎?Android:如何通過標記或標識識別ImageView

這是Xcode中:

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

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

在Android中活動我迄今所做的:在我的onCreate可以將ID分配給每個ImageView的

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();

+0

你是否試圖重用不同的imageViews的ID? – NickF 2013-05-13 21:25:05

回答

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,而不是拖和下降。

+0

謝謝!但我的問題是更多有關如何獲得視圖v在\t公共布爾onTouchEvent(MotionEvent事件){ ? .... – 2013-05-13 22:09:12

1

UPDATE:

我已經找到了解決辦法,也許不是最好的優化,但偉大的工作。希望它可以幫助其他人在類似的情況下:

對於每個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()。這裏的第一件事就是選擇ImageView,並使用之前在整數中設置的ID。

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的任何一個,並在屏幕上移動它們。希望能幫助到你!