首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ImageView和touchListener

ImageView和touchListener
EN

Stack Overflow用户
提问于 2012-06-17 21:53:16
回答 1查看 3.6K关注 0票数 1

我试着使一个图像视图可点击。实际上,它是可点击的,这样我就可以在用户触摸图像视图后调用一个意图。但我正在努力改变触觉上的形象。

我想要以下几点:

  • 默认(无触摸):Image1
  • 用户触摸图像视图:更改为image2
  • 用户用手指移出图像视图:更改为Image1(没有调用意图)
  • 用户取消图像视图:调用意图并切换回Image1

这些东西中有些是使用以下代码的:

代码语言:javascript
复制
final ImageView v = (ImageView) findViewById(R.id.profileImage);

    v.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View arg0, MotionEvent arg1) {
            switch (arg1.getAction()) {
            case MotionEvent.ACTION_DOWN: {
                   v.setImageResource(R.drawable.ic_contact_picture_down);

                break;
            }


            case MotionEvent.ACTION_CANCEL:{

                v.setImageResource(R.drawable.ic_contact_picture);
                break;

            }

            case MotionEvent.ACTION_UP: {

                takePhoto();

                v.setImageResource(R.drawable.ic_contact_picture);
                break;
            }

            }
            return true;
        }
    });

该图像在触摸时正确更改为image2。所以ACTION_DOWN正在工作。如果用户取消对图像视图的访问,则调用ACTION_UP。但是,如果非触摸操作是在图像视图之外完成的,则也会调用它。如果发生这种情况,我希望切换回image1,但不调用takePhoto()函数。从来没有调用过ACTION_CANCEL,我认为它是上述情况的候选。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-17 22:26:32

您可以尝试使用Rect来保持ImageView的界限,然后使用ACTION_MOVE

例如,声明一个Rect对象,

代码语言:javascript
复制
private Rect rect;

然后在setOnTouchListener()中初始化Rect并使用ACTION_MOVE进行检查,

代码语言:javascript
复制
v.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View arg0, MotionEvent arg1) {
        switch (arg1.getAction()) {
          case MotionEvent.ACTION_DOWN: {
            // Declare the bounds of the rect
            rect = new Rect(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());   
            v.setImageResource(R.drawable.ic_contact_picture_down);

            break;
          }

          case MotionEvent.ACTION_MOVE:{
            if(!rect.contains((int)arg1.getX(), (int)arg1.getY())) {
                // Outside the bounds
                v.setImageResource(R.drawable.ic_contact_picture);
            }
            break;        
          }

          case MotionEvent.ACTION_UP: {

            takePhoto();

            v.setImageResource(R.drawable.ic_contact_picture);
            break;
          }
        }
        return true;
    }
});

对不起,我还没有测试这个,但我想你可以得到这样的想法:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11075095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档