項(xiàng)目遇到實(shí)現(xiàn)圖片等比例縮這個(gè)需求時(shí)咧欣,很容易想到如下代碼:
int bwidht=bmp.getWidth();
int bheight=bmp.getHeight();
float sx= (float) ((dewidth0.1)/(bwidht0.1));
Matrix matrix = new Matrix();
matrix.postScale(sx,sx); //長(zhǎng)和寬放大縮小的比例
final Bitmap newb = Bitmap.createBitmap(bmp,0,0,bwidht, bheight,matrix,true );
這樣很容易實(shí)現(xiàn)圖片等比例縮放柬脸,卻隱藏一個(gè)出現(xiàn)oom的隱患Bitmap.createBitmap(bmp,0,0,bwidht, bheight,matrix,true )容易出現(xiàn)oom予颤,所以這中實(shí)現(xiàn)方式不可取的画侣。那么是怎么解決呢?別急;塾颉5翘浴!
解決辦法如下:設(shè)置 ImageViewde的屬性android:adjustViewBounds="true"和android:scaleType="fitXY"即可實(shí)現(xiàn)圖片等比例縮放流译。
<ImageView
android:id="@+id/item_recom_joke_iv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:src="@drawable/default_icon"
/>
把a(bǔ)ndroid:adjustViewBounds="true"和android:scaleType="fitXY"設(shè)置一就實(shí)現(xiàn)圖片等比縮放逞怨,就那么簡(jiǎn)單就解決了「T瑁可是一會(huì)叠赦,產(chǎn)品找過了說在紅米1s 4.2.2會(huì)出現(xiàn)變形,寬正常放大革砸,高沒有沒有正常放大反而縮小除秀。拿著那臺(tái)圖片出現(xiàn)變形的紅米,研究半天也沒有找到原因變形的原因算利。只好強(qiáng)制設(shè)置ImageView高,這樣才解決了這問題册踩。我用的Glide,代碼如下:
Glide.with(context)
.load(url)
.asBitmap()
.placeholder(R.drawable.default_icon)
.into(new BitmapImageViewTarget(imageView)
{
@Override
protected void setResource(Bitmap resource)
{
//獲取圖片資源的寬
int bwidth=resource.getWidth();
//獲取圖片資源的高
int bHeight = resource.getHeight();
//獲取imageView的寬
int contentIvWidth=imageView.getWidth();
//計(jì)算縮放比例
float sy= (float) (contentIvWidth0.1)/(float) (bwidth0.1);
//計(jì)算圖片等比例放大后的高
int tempContentIvHeight= (int) (bHeight*sy);
imageView.setHeight(tempContentIvHeight);
RoundedBitmapDrawable roundedBitmapDrawable = RoundedBitmapDrawableFactory.create(context.getResources(), resource);
roundedBitmapDrawable.setCornerRadius(10); //設(shè)置圓角半徑(根據(jù)實(shí)際需求)
roundedBitmapDrawable.setAntiAlias(true); //設(shè)置反走樣
imageView.setImageDrawable(roundedBitmapDrawable); //顯示圓角圖片
}
});