1

我尝试使图像视图可点击。实际上它是可点击的,因此我可以在用户触摸 imageview 后调用 Intent。但我正在努力改变触摸时的图像。

我想要以下内容:

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

其中一些事情正在使用以下代码:

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。但如果 untouch 是在 imageview 之外完成的,它也会被调用。如果发生这种情况,我想切换回 image1 但不调用 takePhoto() 函数。ACTION_CANCEL 永远不会被调用,我认为它是上述情况的候选者。

4

1 回答 1

0

您可以尝试使用 aRect来保持边界,ImageView然后使用ACTION_MOVE

例如,声明一个Rect对象,

private Rect rect;

然后在你的setOnTouchListener(),初始化Rect和检查使用ACTION_MOVE

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;
    }
});

抱歉,我没有对此进行测试,但我认为您可以理解:)

于 2012-06-17T22:26:32.690 回答