我的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。
你知道我应该如何解决这个问题吗?
答案 0 :(得分:1)
假设您只使用ImageView
的触摸侦听器,您可以执行以下操作:
ImageView imageView = (ImageView) v;
答案 1 :(得分:1)
好的,很久以前我已经问过这个问题 - 但是由于它最近收到了很多点击,甚至是一个upvote,我现在决定回答它。
如果您要移动视图(无论是ImageView还是其他任何类型的视图),您都可以使用我的问题帖子中的代码。将margins
设置为onTouch
MotionEvent
值将适用于RelativeLayouts
。
但是,我的问题还包括如何从View
中的onTouch
- 事件中找到ImageViews
对象 ArrayList<ImageView> arrList = new ArrayList<ImageView>();
/** ... **/
int keyOfView = arrList.indexOf(v);
。
答案也非常简单:
v
View
是ImageView
个对象还是View
对象并不重要。没有必要从ImageView
转换为ImageView
进行ArrayList查找,因为引用将保持不变 - 这就是在List中实际搜索的内容:引用。
但是,如果您(无论出于何种原因)需要来自View
对象的Views
且不确定所有ImageView
实际上是if (v instanceof ImageView) {
ImageView i = (ImageView) v;
}
个对象,那么你可以这样做:
cast-errors
这样您就不会获得var roleFilter = string.Format("Club{0}Admin", clubId);
var roles = ((ClaimsIdentity)User.Identity).Claims
.Where(c => c.Type == ClaimTypes.Role && roleFilter.Equals(c.Value)
.Select(c => c.Value);
。