android - 如何缩放 ImageView /位图和像素与倾角

标签 android

我在线性布局上有一个 ImageView 。

我希望 imageview 缩放它所持有的位图,因此它在线性布局中占用最大量的空间,但仍保持适当的图像比例。

  public static void sharedUtilScaleImage(ImageView view)
  {
      Drawable drawing = view.getDrawable();
      //--
      Bitmap bitmap = ((BitmapDrawable)drawing).getBitmap();
      int bitmapWidth = bitmap.getWidth();
      int bitmapHeight = bitmap.getHeight();
      int widthParent = view.getWidth();      
      int heightParent = view.getHeight();      
      //--
      float density = 1;
      if (true) {
        density = MicApp.getContext().getResources().getDisplayMetrics().density;
      }
      //--
      float xScale = ((float) widthParent * density) / bitmapWidth; 
      float yScale = ((float) heightParent * density) / bitmapHeight;
      float minScale = Math.min(xScale, yScale);  
      //-- 
      Matrix matrix = new Matrix();
      matrix.postScale(minScale, minScale);
      //--
      Bitmap scaledBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmapWidth, bitmapHeight, matrix, true);
      BitmapDrawable result = new BitmapDrawable(scaledBitmap);
      view.setImageDrawable(result);      
  }

作为引用,我在这里找到了上面的一些代码: http://stackoverflow.com/questions/8114085/how-to-create-white-border-around-bitmap

不过,我觉得上面有点令人费解。

  • 我将所有位图存储在 drawable-hdpi 中
  • 位图 .getHeight/.getWidth 返回实际像素(而不是密度改变的像素)
  • 然而, View .getHeight/.getWidth 返回的像素小于它们在手机上的实际像素使用量。我需要将它们与密度相乘以获得实际像素。

为什么返回值不同?

我喜欢我的位图返回它们的实际像素大小。但我在其他地方读到要求将它们放在“res/drawable-nodpi”中,所以这似乎是一个额外的不一致?

作为引用,将位图放置在 imageview 中的代码,以及线性布局中的 imageview 如下所示:

imageView.setImageResource(picIDs[position]);                       
imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);        
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);        
imageView.setLayoutParams(lp);                
//--
linearLayoutInner.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL);
linearLayoutInner.addView(imageView);       

最佳答案

似乎您想将 ImageView 设置为自动调整边界:http://developer.android.com/reference/android/widget/ImageView.html#setAdjustViewBounds(boolean)和规模类型为 FIT_CENTER

位图具有 getScaledWidth 和 getScaledHeight ,它们将为您提供调整后的尺寸(从您的资源中传递显示指标) View 的 getWidth 和 getHeight 应该给出大小的像素值,但如果父级有任何填充,MATCH_PARENT/FILL_PARENT 将匹配父级大小减去填充(或边距)。

关于android - 如何缩放 ImageView /位图和像素与倾角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16462029/

相关文章:

javascript - Android 版 Chrome 中的gesturestart事件模拟

java - 异步多线程: Error compiling shader. (libgdx)

android - 知道我的开发人员是否使用了正确的 "Ad unit ID"

android - 不同的apk签名

java - 生成的RSA公钥和私钥模数在Java/Android中是一样的

Android:onClick 图像使 Textview 不可见

android - ItemizedOverlay 的 setFocus(overlayItem) 不起作用

javascript - 在基于 phonegap 的应用程序上使用 jspdf 生成客户端 pdf

java - 如何在 Android 中使用 Java 以编程方式构建 NavGraph

android - appengine 连接的 android 项目在到达时死机