Я не пробовал это, мне пришло в голову, когда я читал твой вопрос.Как насчет этого.
Допустим, у ImageView нет отступов, а гравитация установлена по центру.Проблема в том, что вы не можете просто использовать ширину и высоту Drawable для вычисления положения прямоугольника, так как он может быть изменен в соответствии с ImageView.Таким образом, вы должны использовать размеры ImageView и соотношение ImageView и Drawable.
Когда соотношение Drawable и ImageView равно, Drawable полностью заполняет ImageView, а затем прямоугольник соответствует размерам ImageView.Координаты прямоугольника (в верхнем левом углу, в обратном направлении): (0/0), (ширина ImageView / 0), (ширина ImageView, высота ImageView), (0 / высота ImageView),
Если соотношения не совпадают и, скажем, например, Drawable шире, чем ImageView, то Drawable заполнит всю ширину ImageView, но не заполнит высоту.Но так как Drawable становится центрированным, мы можем вычислить координату y левого верхнего угла Drawables и, следовательно, для прямоугольника.Сначала вычислите текущую высоту Drawable в ImageView.Это должно быть сделано, поскольку Drawable не имеет своих исходных размеров, поскольку он был изменен в соответствии с ImageView.
current height Drawable = (Drawable height / Drawable width) * ImageView width
y значение координаты левого верхнего угла:
y = (ImageView height - Drawable current height) / 2
Итак, координаты прямоугольника (из левого верхнего угла в обратном направлении): (0 /y), (ширина ImageView / y), (ширина ImageView / y + текущая высота Drawable), (0 / y + текущая высота Drawable)
Надеюсь, вы поняли идею.Если Drawable выше, чем ImageView, вы можете рассчитать его таким же образом, но должны поменять значения ширины и высоты.