【问题标题】:Android: Getting touch location point on ImageViewAndroid:在 ImageView 上获取触摸位置点
【发布时间】:2012-10-02 09:14:45
【问题描述】:

我正在制作一个应用程序,我想在其中获取图像上的接触点。我试过使用这个链接:

Android: how to detect touch location on ImageView if the image view is scaled by matrix?

但是,我无法获得正确的接触点。

我做错了什么?

任何帮助将不胜感激。

这是我的代码:

public boolean onTouch(View v, MotionEvent event) {
                v.onTouchEvent(event);




                matrix.getValues(m);
                float x = m[Matrix.MTRANS_X];
                float y = m[Matrix.MTRANS_Y];
                PointF curr = new PointF(event.getX(), event.getY());

                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    last.set(event.getX(), event.getY());
                    EventX=event.getX();
                    EventY=event.getY();
                    Log.d("ImageX"+event.getX(), "ImageY"+event.getY());
                    start.set(last);
                    mode = DRAG;
                    PosterActivity.isTouched=false;

                    break;
                case MotionEvent.ACTION_MOVE:
                    // Log.i("onTouch", "origWidth : " + origWidth +
                    // " origHeight : " + origHeight);
                    if (mode == DRAG) {
                        deltaX= curr.x - last.x;
                        Log.d("deltaX",""+deltaX);

                        deltaY = curr.y - last.y;
                        Log.d("deltay",""+deltaY);
                        scaleWidth = Math.round(origWidth * saveScale);
                        scaleHeight = Math.round(origHeight * saveScale);
                        if (scaleWidth < width) {
                            deltaX = 0;
                            if (y + deltaY > 0)
                                deltaY = -y;
                            else if (y + deltaY < -bottom)
                                deltaY = -(y + bottom);
                        } else if (scaleHeight < height) {
                            deltaY = 0;
                            if (x + deltaX > 0)
                                deltaX = -x;
                            else if (x + deltaX < -right)
                                deltaX = -(x + right);
                        } else {
                            if (x + deltaX > 0)
                                deltaX = -x;
                            else if (x + deltaX < -right)
                                deltaX = -(x + right);

                            if (y + deltaY > 0)
                                deltaY = -y;
                            else if (y + deltaY < -bottom)
                                deltaY = -(y + bottom);
                        }
                        matrix.postTranslate(deltaX, deltaY);
                        last.set(curr.x, curr.y);
                        PosterActivity.isTouched=true;

                    }
                    break;

                case MotionEvent.ACTION_UP: {
                    mode = NONE;
                    int xDiff = (int) Math.abs(curr.x - start.x);
                    int yDiff = (int) Math.abs(curr.y - start.y);
                    if (xDiff < CLICK && yDiff < CLICK) {
                        Log.v("ACTION_UP", "ACTION_UP");
                        mPosX = curr.x;
                        mPosY = curr.y;

                        PosterActivity.isTouched=true;
                        performClick();

                    }
                    //setImageMatrix(matrix);
                    //invalidate();
                    break;
                }
                case MotionEvent.ACTION_POINTER_UP:
                    mode = NONE;
                    break;
                }
                setImageMatrix(matrix);
                invalidate();
                return true; // indicate event was handled
            }

【问题讨论】:

    标签: android android-canvas android-imageview touch-event


    【解决方案1】:

    为了明白这一点,我已经成功地使用了您所链接问题的答案。 我刚刚用 getRawX() 和 getRawY() 更改了 getX() 和 getY()

    试试这个代码示例

      // calculate inverse matrix
      Matrix inverse = new Matrix();
      matrix.invert(inverse);
      // map touch point from ImageView to image
      float[] touchPoint = new float[] {event.getRawX(), event.getRawY()};
      inverse.mapPoints(touchPoint);
      // touchPoint now contains x and y in image's coordinate system    
      Log.d(TAG, "touch coords="+touchPoint[0] + " - " + touchPoint[1]);
    

    【讨论】:

      【解决方案2】:

      在 ImageView 上应用 setOnTouchLinstener 并获取它的 x 和 y 位置。

      imageView.setOnTouchListener((v, event) -> {
       finalX = event.getX();
       finalY = event.getY();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-27
        • 1970-01-01
        相关资源
        最近更新 更多