繁体   English   中英

onTouchListener:将视图转换为ImageView

[英]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还是任何其他类型的视图),您都可以使用我的问题帖子中的代码。 设置marginsonTouch MotionEvent值将在工作RelativeLayouts


但是,我的问题还包括如何ImageViews的ArrayList中onTouch 查找View对象
答案也非常简单:

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

如果vView对象或ImageView对象,则无关紧要。 无需从ViewImageView进行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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM