之前我已经提出了与此相关的问题,但我认为我的目标是错误的。
我拥有:自定义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;
}
现在我想在原始(未缩放)图像上采用定义矩形的坐标 并将该矩形绘制到图像的同一区域 - 但考虑到比例:
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);
}
结果是“在球场”但不太准确。任何帮助表示赞赏。
答案 0 :(得分:0)
您可以尝试此解决方案:
实施例: 在第一张图片上:
float density = getResources().getDisplayMetrics().density;
int width = getWidth();
float inchesLength = width/density;
float scaledXCenter = xCenter / inchesLength;
在具有不同比例的相同图像上:
float density = getResources().getDisplayMetrics().density;
int width = getWidth();
float inchesLength = width/density;
float restoredXCenter = scaledXCenter * inchesLength;