我正在尝试构建一个绘图工具,该绘图工具允许用户选择图像并将其放置在草图中,然后可以在其中进行操作。
属于该项目的所有图像均已设置为相同的比例(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)时,它看起来更好,值越大,方法越好
android - 大于屏幕分辨率的ImageView重新缩放错误-LMLPHP

在这种情况下,区域设置为30(mts),您可以看到它是如何将图像重新缩放为较小尺寸的,请记住,只有在大于屏幕分辨率的图像上才会发生这种情况
android - 大于屏幕分辨率的ImageView重新缩放错误-LMLPHP

那里有图像处理专家吗?任何有关此事的提示将不胜感激。

最佳答案

使用框架布局包装要插入的图像。

例:

<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/

10-09 18:00