Я уже задавал вопросы, связанные с этим, но думаю, что неправильно сформулировал свою цель.
Что у меня есть: пользовательский ImageView, который отображает графику и определяет несколько сенсорных областей в виде прямоугольников внутри изображения.Моя проблема - масштабирование.Я хочу определить сенсорную область изображения на основе его фактического разрешения в растровом файле, но перевести эти координаты, чтобы прямоугольник покрывал ту же область на масштабированном изображении.
Это то, что я получил до сих пор: когда создается представление, вычислите отношение фактических размеров к масштабированным
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
Drawable pic=this.getDrawable();
int realHeight= pic.getIntrinsicHeight();
int realWidth=pic.getIntrinsicWidth();
int scaledHeight=this.getHeight();
int scaleWidth=this.getWidth();
heightRatio=(float)realHeight/scaledHeight;
widthRatio=(float)realWidth/scaleWidth;
}
Теперь я хочу взять координаты, которые определяют прямоугольник(s) на исходном (немасштабированном) изображении и нарисуйте этот прямоугольник (и) в той же области изображения, но с учетом масштаба:
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint p=new Paint();
p.setStrokeWidth(1);
p.setColor(Color.BLUE);
for (HotSpot h: spots)
{
//Each hotspot has a rectangle defined in reference to the actual size of the image
Rect old=h.getRect();
float offsetLeft=old.left+(old.left*widthRatio);
float offsetTop=old.top+(old.top*heightRatio);
float offsetRight=old.right+(old.right*heightRatio);
float offsetBottom=old.bottom+(old.bottom*widthRatio);
RectF nRect=new RectF(offsetLeft,offsetTop,offsetRight,offsetBottom);
canvas.drawRect(nRect,p);
}
Результаты "в парке мячей""но не совсем точно.Любая помощь приветствуется.