我试图找出当它缩放图像时,android正在做什么,特别是“centercrop”类型.所以要找到答案,我搜索了
ImageView源代码,并找到它为
here.
所以我试过的是这段代码:
public Bitmap buildBluredBoxBackground () { int [] screenSize = Utilities.getScreenSize(mainActivityContext); //screensize[0] = x and [1] is y Matrix mDrawMatrix = new Matrix(); Bitmap bitmap = ((BitmapDrawable)fullscreenViewHolder.imageViewArt.getDrawable()).getBitmap(); float scale; float dx = 0,dy = 0; if (bitmap.getWidth() * screenSize[1] > screenSize[0] * bitmap.getHeight()) { scale = (float) screenSize[1] / (float) bitmap.getHeight(); dx = (screenSize[0] - bitmap.getWidth() * scale) * 0.5f; } else { scale = (float) screenSize[0] / (float) bitmap.getWidth(); dy = (screenSize[1] - bitmap.getHeight() * scale) * 0.5f; } mDrawMatrix.setScale(scale,scale); mDrawMatrix.postTranslate(Math.round(dx),Math.round(dy)); result = Bitmap.createBitmap(bitmap,bitmap.getWidth(),bitmap.getHeight(),mDrawMatrix,true); ... //Some processing work return result; }
但是它并没有给我相同的结果.我究竟做错了什么 ?
举个例子:
原始图片
原始ImageView中心裁剪
试用代码
编辑:
ImageView的XML
<FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_alignParentTop="true"> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/imageViewFullscreenArt"/> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/imageViewFullscreenArtBluredBox"/> </FrameLayout>
所以我的ImageView是全屏的.这就是为什么Im使用screenSize来处理它.
代码如何应用它
Bitmap bluredBoxBackground = buildBluredBoxBackground(); imageViewBluredBox.setImageDrawable(new BitmapDrawable(getResources(),bluredBoxBackground));
详细说明:
我只是试图获得与ImageView.setScaleType(ScaleType.CENTER_CROP)相同的效果.所以我的代码应该像原来的setScaleType方法一样.为什么我需要它作为代码?因为在我的情况下,我无法获取我的ImageView的绘图,但我必须处理&以某种方式编辑它
解决方法
我改编自teh来源.
它将与您一起改变返回Matrix如何申请.
它将与您一起改变返回Matrix如何申请.
public Matrix buildBluredBoxBackground () { int dwidth = imageView.getDrawable().getIntrinsicWidth(); int dheight = imageView.getDrawable().getIntrinsicHeight(); int vwidth = imageView.getWidth() - imageView.getPaddingLeft() - imageView.getPaddingRight(); int vheight = imageView.getHeight() - imageView.getPaddingTop() - imageView.getPaddingBottom(); Matrix mDrawMatrix = imageView.getImageMatrix(); Bitmap bMap = imageView.getDrawingCache(); float scale; float dx = 0,dy = 0; if (dwidth * vheight > vwidth * dheight) { scale = (float) vheight / (float) dheight; dx = (vwidth - dwidth * scale) * 0.5f; } else { scale = (float) vwidth / (float) dwidth; dy = (vheight - dheight * scale) * 0.5f; } mDrawMatrix.setScale(scale,scale); mDrawMatrix.postTranslate(Math.round(dx),Math.round(dy)); return mDrawMatrix; }
然后使用:
Matrix bluredBoxBackground = buildBluredBoxBackground(); imageViewBluredBox.setImageMatrix(bluredBoxBackground)); imageViewBluredBox.invalidate();