我以编程方式在线性布局中插入触摸图像视图。如果我使用普通图像视图,图像会在方向改变时自行调整。但是当我开始使用触摸图像视图时,图像缩小到非常小尺寸。这是我试图实现的代码: -
TouchImageView imageView = new TouchImageView(this);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(16,16,16,16);
imageView.setLayoutParams(layoutParams);
imageView.setMaxZoom(4f);
web_linearLayout.addView(imageView);
imageView.setAdjustViewBounds(true);
imageView.setScaleType(TouchImageView.ScaleType.FIT_CENTER);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
imageView.setCropToPadding(false);
}
imageView.setImageURI(Uri.fromFile(new File("/sdcard/reckoner_images/" + fileName)));
感谢任何帮助或建议。谢谢。
答案 0 :(得分:1)
当您调用方法setImageURI
来加载图像时,图像将根据设备的密度进行缩放。当您使用imageView.setAdjustViewBounds(true);
设置其LayoutParams时,语句ImageView
将使原始WRAP_CONTENT
自动缩放的维度(您可以在ImageView
中读取方法'onMeasure'的来源) 。但是,TouchImageView
会覆盖方法onMeasure
以实现额外的功能,这会导致setAdjustViewBounds
无用(您也可以在onMeasure
中阅读方法TouchImageView
的来源)。因此TouchImageView
的维度无法自动缩放。您可以执行以下操作:
使用setImageBitmap
代替setImageURI
自行加载图片和处理缩放。
//imageView.setImageURI(Uri.fromFile(new File("/sdcard/reckoner_images/" + fileName)));
Bitmap bm = BitmapFactory.decodeFile("/sdcard/reckoner_images/" + fileName);
imageView.setImageBitmap(bm);
或在MATCH_PARENT
WRAP_CONTENT
代替TouchImageView
LinearLayout.LayoutParams layoutParams =
new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
我自己测试过,这很有用。希望它能解决你的问题:)