需求
一個(gè)Activity頁(yè)面純展示一張長(zhǎng)圖,看起來功能是簡(jiǎn)單的,可還是有些坑存在。記錄一下。
坑
要做UI適配,UI給的長(zhǎng)圖并不能正合適完美展示。寬高比不能確定,在ImageView上設(shè)置要么拉伸變形,要么圖片不能鋪滿,與最初的UI設(shè)計(jì)不符,那這個(gè)時(shí)候就需要用到Android的屏幕適配了。
解決方案
根據(jù)圖片的寬高比,計(jì)算出并動(dòng)態(tài)設(shè)置ImageView的寬和高。
代碼
布局:
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none">
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
android:id="@+id/iv_long_img"
android:layout_width="match_parent"
android:layout_height="match_parent" />
代碼實(shí)現(xiàn):
public void setImageViewWideHigh(ImageView imageView, Bitmap bitmap) {
ViewGroup.LayoutParams params = imageView.getLayoutParams();
// 獲得bitmap寬高
float bitWidth = bitmap.getWidth();
float bithight = bitmap.getHeight();
float bitScalew = bithight / bitWidth;
// 獲得屏幕寬高(有多種方式、用自己喜歡的)
WindowManager manager = this.getWindowManager();
DisplayMetrics outMetrics = new DisplayMetrics();
manager.getDefaultDisplay().getMetrics(outMetrics);
int imgWidth = outMetrics.widthPixels;
int imgHight = outMetrics.heightPixels;
// 根據(jù)需求展示長(zhǎng)圖、寬填滿,高按比例設(shè)置
params.width = (int) imgWidth;
params.height = (int) (imgWidth * bitScalew);
// ImageView 控件設(shè)置
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setAdjustViewBounds(true);
imageView.setLayoutParams(params);
imageView.setImageBitmap(bitmap);
}