我正在尝试构建绘图工具,此绘图工具允许用户选择图像并将其放置在草图中,然后可以在其中对其进行操作。 属于项目的所有图像都设置为相同的比例(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返回的函数设置Scale:
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);
此方法将像素转换为Meters:
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;
}
这一切都很顺利,直到我选择一个尺寸大于屏幕分辨率的图像,就像是自动重新缩放,然后根据我的指示进行另一次重新缩放。
一些图片可以了解正在发生的事情:
在此图像中,它似乎正常工作,当工作区域设置为40或更多(mts)时,它看起来更好,值越大,接近越好
在这种情况下,区域设置为30(mts),您可以看到它如何将图像重新缩放到更小的位置,请记住它只发生在大于屏幕分辨率的图像上
那里有图像处理专家吗?任何有关此事的提示都将受到高度赞赏。
答案 0 :(得分:1)
使用包装图像的框架布局。
示例:
<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重新缩放。