onTouchListener:将视图转换为ImageView

时间:2013-08-22 22:49:02

标签: java android 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。

你知道我应该如何解决这个问题吗?

2 个答案:

答案 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

ViewImageView个对象还是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);