2013-08-22 41 views
1

我的ImageView的一個ArrayList的在我的活動-Class和所有的人都應該有相同的行爲:一旦你觸摸它們,移動你的手指向右或向左,x軸這個ImageView的座標也應該移動。onTouchListener:轉換查看到的ImageView

public boolean onTouch(View v, MotionEvent e) { 
    float origin_x = 0; 
    float origin_x2 = 0; 
    RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) v.getLayoutParams(); 
    switch (e.getActionMasked()) { 
     case MotionEvent.ACTION_DOWN: { 
      origin_x = e.getX(); 
      origin_x2 = lp.leftMargin; 
      break; 
     } 
     case MotionEvent.ACTION_MOVE: { 
      float diff = e.getX()-origin_x; 
      System.out.println(diff); 

      lp.setMargins((int) (origin_x2+diff), lp.topMargin, 0, 0); 
      v.setLayoutParams(lp); 
      break; 
     } 
    } 
    return true; 
} 

但因爲我只能在ontouch法使用「查看」 -object,我有沒有可能找出ImageView的被感動了。

你知道我應該怎麼解決這個問題?

+0

如果每個ImageView的得到你的'OnTouchListener'的一個單獨的實例,不會有任何重疊。此外,你的問題是相當模糊的 - 爲什麼你需要找出哪些'ImageView'被感動了(你可以使用'查看#的getId()'來確定),如果你正在做的是移動視圖(其中'onTouch '收到)。 –

回答

1

好吧,這個問題已經被問的我很久以前的事 - 但由於未收到多少點擊,甚至最近,我決定現在回答。

如果您想要移動視圖(不管它是ImageView還是任何其他類型的視圖),您可以使用我的問題帖中的代碼。在margins設置爲onTouchMotionEvent值將在RelativeLayouts工作。


不過,我的問題還包括如何找到從onTouch - 活動View對象ImageViews一個ArrayList。
這個問題的答案是非常簡單的,以及:

ArrayList<ImageView> arrList = new ArrayList<ImageView>(); 
/** ... **/ 
int keyOfView = arrList.indexOf(v); 

如果vView對象或ImageView對象沒關係。有沒有必要從View轉換爲ImageView爲ArrayList中查找,因爲參考將保持相同的 - 那就是什麼實際被搜索的列表:參考。


然而,如果(無論何種原因)不View對象需要一個ImageView知道所有Views實際上ImageView對象,那麼你可以這樣做這樣的:

if (v instanceof ImageView) { 
    ImageView i = (ImageView) v; 
} 

這樣你不會得到cast-errors

1

假設你永遠只使用觸摸聽者ImageView是你可以這樣做:

ImageView imageView = (ImageView) v;