![](/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.