android - 大于屏幕分辨率的 ImageView 重新缩放错误

标签 android image imageview android-imageview android-relativelayout

我正在尝试构建一个绘图工具,该绘图工具允许用户选择图像并将它们放置在草图中,然后可以在草图中进行操作。 属于该项目的所有图像都已设置为相同的比例(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),您可以看到它是如何将图像重新缩放到更小的,请记住它只发生在大于屏幕分辨率的图像上

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

最佳答案

使用 Frame 布局包裹要插入的图像。

例子:

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

相关文章:

android - 为什么横屏模式下的键盘是这样的?

java - 更改省电模式的状态(开/关)

image - 均衡一组图像的亮度、亮度和对比度

android - 在 Android 4.4.2 上,WebView 加载缓慢

android - 如何自定义 Action 模式的颜色和文字?

android - 我们可以在 Android 中调整按钮的边框吗?

C# 从文件夹中获取图像

java - 如何在 javafx 中调整 imageview 图像的大小?

android - ImageView findViewById 和 setContent(R.layout.main) 不起作用

android - 设置后让ImageView消失