日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

设置背景图时防止图片拉伸的解决方法

發(fā)布時(shí)間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设置背景图时防止图片拉伸的解决方法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在設(shè)置背景圖時(shí),如果圖片不夠大會(huì)被拉伸,使圖片失真,如果圖片太大會(huì)對(duì)view控件的顯示造成影響。
如果只是在ImageView中設(shè)置圖片的話,在程式中可以利用setScaleType進(jìn)行動(dòng)態(tài)設(shè)定,在xml中可以簡(jiǎn)單的用android:scaleType來(lái)設(shè)定。
(android:scaleType="CENTER_INSIDE" 圖片比View小,圖片不會(huì)拉伸
?android:scaleType="CENTER_CROP"? 圖片比View大,View不被拉伸? 其他屬性的設(shè)置以后慢慢在研究。)
現(xiàn)在要作的是設(shè)置LinearLayout的background時(shí)如何讓圖片自適應(yīng)屏幕的大小,包含屏幕旋轉(zhuǎn)時(shí)的調(diào)整。
程式代碼如下:

private Drawable createImage(File imageFile) {try {// 取得當(dāng)前屏幕的長(zhǎng)寬DisplayMetrics dm = new DisplayMetrics();this.getWindowManager().getDefaultDisplay().getMetrics(dm);float screenWidth = dm.widthPixels;float screenHeight = dm.heightPixels;// 取得圖片的大小并計(jì)算縮放比例BitmapFactory.Options o = new BitmapFactory.Options();o.inJustDecodeBounds = true;BitmapFactory.decodeStream(new FileInputStream(imageFile), null, o);float bitmapWidth = o.outWidth;float bitmapHeight = o.outHeight;float scale = (screenWidth / bitmapWidth < screenHeight/ bitmapHeight) ? screenWidth / bitmapWidth : screenHeight/ bitmapHeight;// 圖片縮小放大Bitmap bitmap = BitmapFactory.decodeStream(new FileInputStream(imageFile));Matrix matrix = new Matrix();matrix.postScale(scale, scale);Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0,bitmap.getWidth(), bitmap.getHeight(), matrix, true);bitmap.recycle();// 繪制背景圖片Bitmap mBitmap = Bitmap.createBitmap((int) screenWidth,(int) screenHeight, Bitmap.Config.RGB_565);Canvas mCanvas = new Canvas(mBitmap);Paint BitmapPaint = new Paint(Paint.FILTER_BITMAP_FLAG);// 設(shè)定背景顏色mCanvas.drawColor(0xff000000);mCanvas.drawBitmap(resizedBitmap, screenWidth / 2 - bitmapWidth* scale / 2, screenHeight / 2 - bitmapHeight * scale / 2,BitmapPaint);mCanvas.save();BitmapDrawable drawable = new BitmapDrawable(mBitmap);resizedBitmap.recycle();return drawable;} catch (FileNotFoundException e) {}return null;}

調(diào)用方法為:

try {Drawable image = createImage(imageFile);background.setBackgroundDrawable(image);} catch (Exception e) {Log.e("Exception", e.toString());return false;}

//===========================================================================
在上面的程式中用到了Matrix進(jìn)行圖片的放大和縮小。
使用BitmapFactory.decodeStream的option的話只能放大或縮小整數(shù)倍(使用方法在其他文章中有介紹了)
Matrix的功能非常強(qiáng)大,不止可以放大縮小,還可以設(shè)置透明度等,Matrix的操作,總共分為translate(平移),rotate(旋轉(zhuǎn)),scale(縮放)和skew(傾斜)四種。
具體使用方法參考網(wǎng)址:
http://blog.csdn.net/hui_ttoo/article/details/6202762
http://liliang1222.iteye.com/blog/1152474
http://www.moandroid.com/?p=1781
http://www.cnblogs.com/leon19870907/articles/1978065.html
http://www.r-base.net/archives/148
http://my.oschina.net/amigos/blog/59598
// ==========================================================================
使用到了Canvas用來(lái)根據(jù)之前的圖片的縮放比例配合背景畫一張新的背景圖,用來(lái)顯示。
具體用法可以參考網(wǎng)址。
http://aina-hk55hk.iteye.com/blog/690921
// ==========================================================================
另外在查資料過(guò)程中,還發(fā)現(xiàn)另一種制作圖片效果的用法。
參考網(wǎng)址:http://blog.csdn.net/pgmsoul/article/details/7073332

BitmapDrawable drawable = new BitmapDrawable(mBitmap); drawable.setTileModeXY(TileMode.REPEAT, TileMode.REPEAT); drawable.setDither(true);

可以實(shí)現(xiàn)圖片平鋪(TileMode.REPEAT)和倒影效果(TileMode.MIRROR),在setTileModeXY中設(shè)置不同的參數(shù)。
還有另外一種TileMode.CLAMP,邊緣拉伸效果,不知道在什么情況下會(huì)用到。
// =========================================================================
另外在制作背景圖時(shí),可以利用draw9patch來(lái)制作不失真背景。
例如textView添加邊框,可以利用.9.png。
具體可以參考網(wǎng)址:http://archive.cnblogs.com/a/2017591/

轉(zhuǎn)載于:https://www.cnblogs.com/sipher/archive/2012/07/03/2575264.html

總結(jié)

以上是生活随笔為你收集整理的设置背景图时防止图片拉伸的解决方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。