如何使用OnTouch()检查图像是否被触摸

时间:2011-08-04 09:12:43

标签: android

我试图在Touch of Image上获得x,y坐标,并且我想要执行一些操作。所以,任何人都可以告诉我如何触摸图像的x,y坐标。在此先感谢。

我的代码 -

public class MovableObject extends ImageView implements OnTouchListener{

    Bitmap myBmp;
    Paint myPaint = new Paint();
    int MoveX = 0;

    public MovableObject(Context context,int moveObject,Bitmap myBmp) {
        super(context);
        super.setClickable(true);
        this.myBmp = myBmp;
        myPaint.setColor(Color.WHITE);
        this.MoveX = moveObject;
        setOnTouchListener(this);
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawBitmap(myBmp, MoveX, 100, myPaint);
    }
    @Override
    public boolean onTouch(View v, MotionEvent event) {

        switch (event.getAction() & MotionEvent.ACTION_MASK) {

            case MotionEvent.ACTION_DOWN:
                System.out.println("down...."+event.getX()+" "+event.getY());
            case MotionEvent.ACTION_MOVE:
        }
        return true;
    }
}

通过这个我得到了我点击的x,y坐标,但是当我点击我的图像时,我想得到x,y。

5 个答案:

答案 0 :(得分:6)

  

MoveX - 它是你视图的起始坐标。
  MoveY -   这是你观点的起始坐标   imgHeiht - 这是   图像的高度;
  imgWidth - 它是图像的宽度;

     

event.getX() - 这是你X坐标的实际位置。

     

event.getY() - 这是你Y坐标的实际位置。

if(MoveX <= event.getX() && event.getX()<= (MoveX+imgWidth) && (MoveY <= event.getY() && (event.getY() <= MoveY+imgHeight))){
    System.out.println("down...."+event.getX()+" "+event.getY());
    }

这可能会对你有帮助。

答案 1 :(得分:2)

我找到了另一种方式,我认为这是使用Rect

检测任何视图的触摸的最佳方式

我刚刚创建了一个返回Rect实例的方法,包括视图的所有四个坐标

   private Rect getLocationOnScreen(View mView) {
        Rect mRect = new Rect();
        int[] location = new int[2];

        mView.getLocationOnScreen(location);

        mRect.left = location[0];
        mRect.top = location[1];
        mRect.right = location[0] + mView.getWidth();
        mRect.bottom = location[1] + mView.getHeight();

        return mRect;
    }

然后只需覆盖您的活动中的onTouchEvent(MotionEvent event),并检查您要检测的任何视图的坐标是否被触及,

@Override
public boolean onTouchEvent(MotionEvent event) {
     int x = (int) event.getX();
     int y = (int) event.getY();

     if (event.getAction() == MotionEvent.ACTION_DOWN &&
                                      getLocationOnScreen(imageview).contains(x, y)) {
          Toast.makeText(getApplicationContext(), 
                                          "ImageView Touched", Toast.LENGTH_LONG).show();
     }
    return super.onTouchEvent(event);
}

答案 2 :(得分:0)

这些是您可以从图像视图调用的一些方法,假设您有这个图像。尝试尝试,你得到你需要的东西。

ImageView iv;
iv.setOnTouchListener(new OnTouchListener() {           
@Override
public boolean onTouch(View v, MotionEvent event) {
    event.getX();
    event.getX(pointerIndex)
    event.getXPrecision()
    return true;
}
});

答案 3 :(得分:0)

试试这个..

ImageView.setOnTouchListener(new View.OnTouchListener(){
@Override
    public boolean onTouch(View v, MotionEvent event)
    {
        if(event.getAction()==MotionEvent.ACTION_DOWN)
        {
            float x = event.getX();
            float y = event.getY();
        }
     return true;
    }
}

答案 4 :(得分:0)

你无法直接获取图像坐标,当你绘制图像时,你可以在屏幕上获得图像区域,然后你可以使用@CapDroid方法来获取图像坐标