如何使用TouchImageView以编程方式调整图像宽度以适应线性布局?

时间:2016-08-31 06:03:52

标签: java android touchimageview

我以编程方式在线性布局中插入触摸图像视图。如果我使用普通图像视图,图像会在方向改变时自行调整。但是当我开始使用触摸图像视图时,图像缩小到非常小尺寸。这是我试图实现的代码: -

 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)));

感谢任何帮助或建议。谢谢。

1 个答案:

答案 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

的LayoutParams中使用WRAP_CONTENT代替TouchImageView
LinearLayout.LayoutParams layoutParams =
            new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);

我自己测试过,这很有用。希望它能解决你的问题:)