根據屏幕寬度,等比例縮放圖片

實現圖片適應屏幕寬度方式:獲取屏幕大小,動態設置控件高度。
ImageView有scaleType屬性可以縮放圖片,讓圖片鋪滿屏幕寬度,但是會出現壓縮或裁剪的情況。

ImageView的scaleType的屬性分別是matrix(默認)、center、centerCrop、centerInside、fitCenter、fitEnd、fitStart、fitXY

android:scaleType=”center”

保持原圖的大小,顯示在ImageView的中心。當原圖的size大於ImageView的size,超過部分裁剪處理。

android:scaleType=”centerCrop”

以填滿整個ImageView爲目的,將原圖的中心對準ImageView的中心,等比例放大原圖,直到填滿ImageView爲止(指的是ImageView的寬和高都要填滿),原圖超過ImageView的部分作裁剪處理。

android:scaleType=”centerInside”

以原圖完全顯示爲目的,將圖片的內容完整居中顯示,通過按比例縮小原圖的size寬(高)等於或小於ImageView的寬(高)。如果原圖的size本身就小於ImageView的size,則原圖的size不作任何處理,居中顯示在ImageView。

android:scaleType=”matrix”

不改變原圖的大小,從ImageView的左上角開始繪製原圖,原圖超過ImageView的部分作裁剪處理。

android:scaleType=”fitCenter”

把原圖按比例擴大或縮小到ImageView的ImageView的高度,居中顯示

android:scaleType=”fitEnd”

把原圖按比例擴大(縮小)到ImageView的高度,顯示在ImageView的下部分位置

android:scaleType=”fitStart”

把原圖按比例擴大(縮小)到ImageView的高度,顯示在ImageView的上部分位置

android:scaleType=”fitXY”

把原圖按照指定的大小在View中顯示,拉伸顯示圖片,不保持原比例,填滿ImageView.
實現圖片適應屏幕寬度方式:獲取屏幕大小,動態設置控件高度。實現代碼:
例1:
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.b206_125);
int bwidth = bitmap.getWidth();
int bHeight = bitmap.getHeight();

    int width = Screen.getScreenWidth(this);
    Log.e("====", bwidth + " " + bHeight + " " + width);
    ImageView img5 = (ImageView)this.findViewById(R.id.img5);
    int height = width * bHeight / bwidth;
    ViewGroup.LayoutParams para = img5.getLayoutParams();
    para.height = height;

例2:
獲取屏幕高度:
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
screenWidth = dm.widthPixels;
screenHeight = dm.heightPixels;
動態設置寬高:
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, (int) (screenHeight*0.1f));
lp.gravity = Gravity.CENTER_VERTICAL;
lp.leftMargin=30;
logo.setLayoutParams(lp);
例3:
/**
* 將圖片等比例縮放 setAdjustViewBounds setMaxWidth setMaxWidth必須同時設置纔有效
*
* @param context
* @param view
* 父容器
* @param image
* 圖片控件
* @param source
* 圖片資源
*/
public static void setImageViewMathParent(Activity context, LinearLayout view,
ImageView image, int source) {
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(),
source);
DisplayMetrics displayMetrics = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay()
.getMetrics(displayMetrics);
float scalew = (float) displayMetrics.widthPixels
/ (float) bitmap.getWidth();
image.setScaleType(ScaleType.MATRIX);
Matrix matrix = new Matrix();
image.setAdjustViewBounds(true);
if (displayMetrics.widthPixels < bitmap.getWidth()) {
matrix.postScale(scalew, scalew);
} else {
matrix.postScale(1 / scalew, 1 / scalew);
}
image.setMaxWidth(displayMetrics.widthPixels);
float ss = displayMetrics.heightPixels > bitmap.getHeight() ? displayMetrics.heightPixels
: bitmap.getHeight();
image.setMaxWidth((int) ss);
view.addView(image);
if (bitmap != null && bitmap.isRecycled()) {
bitmap.recycle();
}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章