【问题标题】:How can I check the Image is Touched using OnTouch()如何使用 OnTouch() 检查图像是否被触摸
【发布时间】:2011-08-04 09:12:43
【问题描述】:

我正在尝试获取 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。

【问题讨论】:

    标签: android


    【解决方案1】:

    MoveX - 它是视图的起始 x 坐标。
    移动- 它是视图的起始 y 坐标。
    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());
        }
    

    这可能会对你有所帮助。

    【讨论】:

      【解决方案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;
          }
      

      然后在您的 Activity 中简单地覆盖 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);
      }
      

      【讨论】:

        【解决方案3】:

        这些是您可以从图像视图中调用的一些方法,假设您在其中有此图像。尝试实验,我得到你需要的。

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

        【讨论】:

        • 我正在这样做,但我想获取图像的 x,y 坐标然后触摸。
        【解决方案4】:

        试试这个..

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

        【讨论】:

        • 我已经这样做了,但我想在触摸图像时获取 x,y 坐标。
        • 我明白了,但至于我,我不知道是否有任何直接的方法。但是您确定可以计算相对于图像(上,左)(x,y)到屏幕原点的值。如果我们有直接的方法,肯定是值得的。
        • @CapDroid 要求即将获得某个视图的位置。这将只给出屏幕的 xy 坐标。
        • 它会给出你应用了onTouch方法的那个视图的位置
        【解决方案5】:

        不能直接获取图像坐标,绘制图像时可以获取屏幕中的图像区域,然后可以使用@CapDroid方法获取图像坐标

        【讨论】:

        • 如何获取图片区域?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-14
        • 2013-06-20
        • 1970-01-01
        • 2016-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多