我正在尝试构建一个绘图工具,该绘图工具允许用户选择图像并将其放置在草图中,然后可以在其中进行操作。
属于该项目的所有图像均已设置为相同的比例(1:100):程序创建工作区的步骤如下,首先弹出对话框,要求用户在X轴上输入工作区:
//prompts user for area size
String areaX = txtLargeArea.getText().toString();
//parse to int
int area = Integer.parseInt(areaX);
if (area > 14 && area < 101) {
//set atributes from MyConvert Class
// 15 is a fixed size for Y axis
MyConvert.setAreaSelected(new PointF(area, 15));
MyConvert.setScale(MyConvert.setSizeWorkAre());
使用setSizeWorkAre函数返回的任何值来设置比例:
public static float setSizeWorkAre() {
PointF offsetMtrs = PixsToMts(offset);//65x100 are default value to set the offset point for the plot
scale = 1;
PointF screenInMts = PixsToMts(screenResolution);
return ((areaSelected.x + offsetMtrs.x) / screenInMts.x);
此方法将像素转换为米:
public static PointF PixsToMts(PointF coordenate) {
return new PointF((float) ((((coordenate.x * 2.54) / dpi) * scale) / 100),
(float) ((((coordenate.y * 2.54) / dpi) * scale) / 100));
}
然后我得到屏幕分辨率:
// class that allows to obtain info about device
DisplayMetrics metrics = getResources().getDisplayMetrics();
//set atributes from MyConvert class
MyConvert.setDpi(metrics.densityDpi);
MyConvert.setScreenResolution(new
PointF(metrics.widthPixels,metrics.heightPixels));
现在,我设置了屏幕工作区,然后继续放置图像:
ImageView newImage = new ImageView(getContext());
//set properties for imageView
newImage.setScaleType(ImageView.ScaleType.CENTER);
newImage.setAdjustViewBounds(true);
newImage.setDrawingCacheEnabled(true);
newImage.setOnTouchListener(this);
这是图像重新缩放的地方
imgViewSelected.getLayoutParams().width = (int)
MyConvert.scaleValue(newImage.getDrawable().getIntrinsicWidth());
imgViewSelected.getLayoutParams().height = (int)
MyConvert.scaleValue(newImage.getDrawable().getIntrinsicHeight());
和scaleValue方法:
public static float scaleValue(float value){
float resScale= getScale()/122;
float salida= value/resScale;
return salida;
}
直到我选择一个尺寸大于屏幕分辨率的图像,这一切都很好,就像android是否自动重新缩放,然后根据我的说明进行另一个重新缩放。
一些图像可以说明正在发生的事情:
在此图像中,它似乎正在按预期方式工作,当工作区域设置为40或更大(mts)时,它看起来更好,值越大,方法越好
在这种情况下,区域设置为30(mts),您可以看到它是如何将图像重新缩放为较小尺寸的,请记住,只有在大于屏幕分辨率的图像上才会发生这种情况
那里有图像处理专家吗?任何有关此事的提示将不胜感激。
最佳答案
使用框架布局包装要插入的图像。
例:
<FrameLayout
android:id="@+id/yourid"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent">
</ImageView>
</FrameLayout>
FrameLayout或Scroll View不受屏幕尺寸的限制,因此您的图像不会被Android重新缩放。
关于android - 大于屏幕分辨率的ImageView重新缩放错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43238986/