Я недавно столкнулся с этой проблемой, когда делал что-то очень похожее, и после некоторых проб и ошибок и большого количества поисков в Google, я в итоге адаптировал этот ответ (https://stackoverflow.com/a/9945896/1131180):
(например, MotionEvent, поэтому лучше всего использовать этот код в onTouch или onLongPress)
mClickCoords = new float[2];
//e is the motionevent that contains the screen touch we
//want to translate into a canvas coordinate
mClickCoords[0] = e.getX();
mClickCoords[1] = e.getY();
Matrix matrix = new Matrix();
matrix.set(getMatrix());
//this is where you apply any translations/scaling/rotation etc.
//Typically you want to apply the same adjustments that you apply
//in your onDraw().
matrix.preTranslate(mVirtualX, mVirtualY);
matrix.preScale(mScaleFactor, mScaleFactor, mPivotX, mPivotY);
// invert the matrix, creating the mapping from screen
//coordinates to canvas coordinates
matrix.invert(matrix);
//apply the mapping
matrix.mapPoints(mClickCoords);
//mClickCoords[0] is the canvas x coordinate and
//mClickCoords[1] is the y coordinate.
Есть несколько очевидных оптимизаций, которые могут быть применены здесь, но я думаю, что это станет более понятным.