Android中圖片適配螢幕問題,

來源:互聯網
上載者:User

Android中圖片適配螢幕問題,

近日在學習美化android應用的介面,在做APP啟動畫面時遇到這種情況:自己很喜歡的一張圖跟手機螢幕解析度不統一!!多麼痛苦的一件事!於是網上各種搜尋,有很多種方法,基本都試過,效果都不太好,下面說說網上很多人的回答。

其中一種方法就是在layout中加上setScaleType,可以設定幾個值,下面分別說明:

1、ImageView.ScaleType.CENTER。按照圖片本身的大小在View中置中顯示,如果圖片本身大於螢幕尺寸的話,則截取中間部分顯示。

2、ImageView.ScaleType.CENTER_CROP。按比例擴大,仍然是置中顯示,使得圖片的寬或高大於或等於View的邊長。

3、ImageView.ScaleType.CENTER_INSIDE。按比例縮小,效果與上面一點相反。

4、ImageView.ScaleType.FIT_CENTER。把圖片按比例擴大/縮小到View的寬度,置中顯示。

5、FIT_START, FIT_END在圖片縮放效果上與FIT_CENTER一樣,但是顯示的位置不同,FIT_START是置於頂部,FIT_CENTER置中,FIT_END置於底部。

6、 FIT_XY。不按比例縮放圖片,目標是把圖片塞滿整個View。此方法可使圖片全螢幕顯示。

但是!!!以上方法會剪下圖片或者直接變形,所以最終效果是非常差的。下面是:

然後我找到一個博主寫的方法,在使圖片填滿螢幕的前提下,最大程度保證圖片的縮放效果,保證圖片不變形。下面貼上代碼:

 private void setBsetBitmap(Bitmap bitmap, ImageView imageView, int width,
                        int height) {
                //計算最佳縮放倍數
//                float scaleX = (float) width / bitmap.getWidth();
//                float scaleY = (float) height / bitmap.getHeight();
//                float bestScale = scaleX < scaleY ? scaleX : scaleY;
                //計算最佳縮放倍數,以填充寬高為目標
                float scaleX = (float) width / bitmap.getWidth();
                float scaleY = (float) height / bitmap.getHeight();
                float bestScale = scaleX > scaleY ? scaleX : scaleY;
                //以填充高度的前提下,計算最佳縮放倍數
        //        float bestScale = (float) height / bitmap.getHeight();

                float subX = (width - bitmap.getWidth() * bestScale) / 2;
                float subY = (height - bitmap.getHeight() * bestScale) / 2;

                Matrix imgMatrix = new Matrix();
                imageView.setScaleType(ScaleType.MATRIX);
                //縮放最佳大小
                imgMatrix.postScale(bestScale, bestScale);
                //移動到置中位置顯示
                imgMatrix.postTranslate(subX, subY);
                //設定矩陣
                imageView.setImageMatrix(imgMatrix);

                imageView.setImageBitmap(bitmap);
        }

參數:bitmap:即所要顯示的圖片;imageView:顯示圖片的控制項;width:螢幕的寬度;height:螢幕高度。螢幕的寬高可用如下方法擷取:

WindowManager windowManager = getWindowManager();
Display display = windowManager.getDefaultDisplay();
screenWidth = display.getWidth();
screenHeight = display.getHeight();

在要顯示圖片的介面中調用此方法可使圖片不變形貼合螢幕,當然這樣做跟用適合螢幕解析度的圖片顯示還是有差別的,畢竟不是原圖,經過一定比例的調整,但是在這幾種方法中,這個方法的效果是最好的。下面是:

雖然圖片被截掉了一部分但是整體看起來好看很多了,因為這張圖片尺寸比手機高太多,所以差別會大一點,如果只是尺寸跟手機螢幕差別不大的話與原圖差別是非常細微的。

還有一種方法是在layout中設定保持寬高比,setadjustViewBounds(也可在代碼中完成),需要注意的是這個方法需要設定maxHeight和maxWidth,同時設定layout_height和layout_width為wrap_content,也可達到同樣效果,但是用這個方法在不同尺寸的手機上仍舊會有不同效果,所以還是寫一個setBsetBitmap方法比較好用,當然了,如果你有適配螢幕的圖片就不用那麼麻煩了。

新人第一次寫博,也剛學習安卓不長時間,有什麼錯誤各位大蝦請指正!

參考文章:http://blog.csdn.net/larryl2003/article/details/6919513

http://www.apkbus.com/android-178800-1-1.html


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.