Android ImageView - Get coordinates of tap (click) regardless of scroll location or zoom scale

前端 未结 2 1490
清酒与你
清酒与你 2020-12-07 17:54

Background: I have an ImageView that I\'ve modified to be scrollable (drag) and zoom-able (pinch zoom). I used the exact technique mentioned in the \"Hello,

相关标签:
2条回答
  • 2020-12-07 18:53

    You can also calculate the inverse matrix and use the mapPoints() method:

     // Get the inverse matrix
     Matrix inverseMatrix = new Matrix();
     matrix.invert(inverseMatrix);
    
     // Transform to relative coordinates
     float[] point = new float[2];
     point[0] = e.getX();
     point[1] = e.getY();
     inverseMatrix.mapPoints(point);
    
    0 讨论(0)
  • 2020-12-07 19:00

    I found a solution to this using bits of info I've pieced together from other questions on this site. To give back to the community, I figured it was only right to share what I learned. Hope this helps somebody:

    // Get the values of the matrix
    float[] values = new float[9];
    matrix.getValues(values);
    
    // values[2] and values[5] are the x,y coordinates of the top left corner of the drawable image, regardless of the zoom factor.
    // values[0] and values[4] are the zoom factors for the image's width and height respectively. If you zoom at the same factor, these should both be the same value.
    
    // event is the touch event for MotionEvent.ACTION_UP
    float relativeX = (event.getX() - values[2]) / values[0];
    float relativeY = (event.getY() - values[5]) / values[4];
    

    Thanks to these sources: source 1 and source 2

    0 讨论(0)
提交回复
热议问题