在设置背景图时,如果图片不够大会被拉伸,使图片失真,如果图片太大会对view控件的显示造成影响。
如果只是在ImageView中设置图片的话,在程式中可以利用setScaleType进行动态设定,在xml中可以简单的用android:scaleType来设定。
(android:scaleType="CENTER_INSIDE" 图片比View小,图片不会拉伸
 android:scaleType="CENTER_CROP"  图片比View大,View不被拉伸  其他属性的设置以后慢慢在研究。)
现在要作的是设置LinearLayout的background时如何让图片自适应屏幕的大小,包含屏幕旋转时的调整。
程式代码如下:

private Drawable createImage(File imageFile) {        try {            // 取得当前屏幕的长宽            DisplayMetrics dm = new DisplayMetrics();            this.getWindowManager().getDefaultDisplay().getMetrics(dm);            float screenWidth = dm.widthPixels;            float screenHeight = dm.heightPixels;                        // 取得图片的大小并计算缩放比例            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);            // 设定背景颜色            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;    }

调用方法为:

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

//===========================================================================
在上面的程式中用到了Matrix进行图片的放大和缩小。
使用BitmapFactory.decodeStream的option的话只能放大或缩小整数倍(使用方法在其他文章中有介绍了)
Matrix的功能非常强大,不止可以放大缩小,还可以设置透明度等,Matrix的操作,总共分为translate(平移),rotate(旋转),scale(缩放)和skew(倾斜)四种。
具体使用方法参考网址:
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用来根据之前的图片的缩放比例配合背景画一张新的背景图,用来显示。
具体用法可以参考网址。
http://aina-hk55hk.iteye.com/blog/690921
// ==========================================================================
另外在查资料过程中,还发现另一种制作图片效果的用法。
参考网址:http://blog.csdn.net/pgmsoul/article/details/7073332

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

可以实现图片平铺(TileMode.REPEAT)和倒影效果(TileMode.MIRROR),在setTileModeXY中设置不同的参数。
还有另外一种TileMode.CLAMP,边缘拉伸效果,不知道在什么情况下会用到。
// =========================================================================
另外在制作背景图时,可以利用draw9patch来制作不失真背景。
例如textView添加边框,可以利用.9.png。
具体可以参考网址:http://archive.cnblogs.com/a/2017591/

更多相关文章

  1. Android(安卓)8.1 关机充电动画(二)Uboot模式
  2. Android开发Error(建议收藏下来以备不时之需)android.os.Transacti
  3. Android(安卓)开源项目推荐
  4. 个人android遇到的问题总结
  5. android 加载大图长图失真或者不显示。
  6. Android显示gif格式图片
  7. Android训练课程(Android(安卓)Training) - 使用Volley传输网络
  8. 高亮的关键字
  9. Android加载图片的几种方式

随机推荐

  1. Android(安卓)ConstraintLayout 简介
  2. Windows搭建Eclipse+JDK+SDK的Android
  3. Android(安卓)sharesdk 集成Google登陆,报
  4. jquery 表格 删改操作
  5. Android中onTouch与onClick事件的关系
  6. android远程服务
  7. Android(安卓)面试题总结(一)
  8. Android(安卓)解决 GetLastKnownLocation
  9. unable to connect to 192.168.1.110:555
  10. android GoogleMap定位(二)