![](/img/trans.png)
[英]ImageView onTouchListener: cant touch the imageview behind
[英]onTouchListener: Convert View to ImageView
我的Activity-Class中有一個ImageView的ArrayList,所有這些都應該具有相同的行為:只要你觸摸它們並將手指向右或向左移動,這個ImageView的x坐標也應該移動。
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-Method中使用“View” - Object,因此我無法找到觸及的ImageView。
你知道我應該怎么解決這個問題嗎?
好的,我很久以前就已經問過這個問題 - 但是由於它最近收到了很多點擊,甚至是一個upvote,我現在決定回答它。
如果要移動視圖 (無論是ImageView還是任何其他類型的視圖),您都可以使用我的問題帖子中的代碼。 設置margins
到onTouch
MotionEvent
值將在工作RelativeLayouts
。
但是,我的問題還包括如何從ImageViews
的ArrayList中的onTouch
查找View
對象 。
答案也非常簡單:
ArrayList<ImageView> arrList = new ArrayList<ImageView>();
/** ... **/
int keyOfView = arrList.indexOf(v);
如果v
是View
對象或ImageView
對象,則無關緊要。 無需從View
為ImageView
進行ArrayList查找,因為引用將保持不變 - 這就是在List中實際搜索的內容:引用。
但是, 如果 (無論出於何種原因),確實需要一個ImageView
從一個View
對象 , 不能確定是否所有的Views
實際上是ImageView
對象,那么你可以做這樣的事情:
if (v instanceof ImageView) {
ImageView i = (ImageView) v;
}
這樣你就不會得到cast-errors
。
假設您只使用ImageView
的觸摸偵聽器,您可以執行以下操作:
ImageView imageView = (ImageView) v;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.