先在这里吐槽一下万恶的客户改需求...

再说一句...网上大部份资料都是坑爹的.因为不是针对你需求来写的....别照抄..你只能从多种答案中总结出自己的代码.自己的方法

所谓不规则背景图片是指色彩不同统.不是图形不规则. ----如户外照片

在安卓中.为了尽量避免布局问题.我们一般都是尽量使用统一色调或有一定变色规律的图片作为背景.因为这样易处理. 用.9图

但遇到一般变态的需求..那就实在没办法了.下面进入主题

一般要做自适应的背景. 尽量做单色或有规则的图.这样可以用.9图来无限拉伸,还不变形.

什么是.9图..做安卓的一定要用.请百度draw9patch的用法

安卓有各种不同屏幕不同像素不同密度的手机.如果一个应用面向广,那必定要做到各种机型匹配.

这里对什么像素什么密度这个坑爹的东西就不说了.说了我也懂,你也不懂.

要做到绝大部份机型屏幕匹配.有三步必不可少

第一, 做多套图,不是所有的activity都做多套图.主要是针对哪个activity加载过那些坑爹的不规则图的来做

hdpi(480*800)--ldpi(320*480)--mdpi(240*320)--xhdpi(720*1280)四个文件夹各一套(文件命名相同)...别想偷懒了.项目经理会叼死你的

第二 针对多套图,做多套布局

图片问题解决了,接下来到布局.别以为解决图片就完事了. 因为如果你布局中有写死的高或宽度..屏幕(分辩率)的大小也会影响到布局的...

针对各套图对一个布局(文件命名相同)放在不同的文件夹中. 文件夹的命名有点要注意.在res下新建一个名为layout-800x480的文件夹放针对hdpi图的.依以类推..就得800在前面.要不报错...

第三用bitmap.createBitmap()方法对图片进行切割.以便适应应用程序的宽高(不是屏幕的宽高喔..如果不是满屏的,还有那该死的通知栏高度要减去的)

当你欢天喜地地做完第一第二步就去设背景图时.若你细心.如果你直接用480*800的图作背景时..TMD还是会被压扁了..为什么.网上的人都说直接切480的高就可以自动适应的.为什么..我告诉你. 网上的大部份都是坑爹的答案..要么是copy.要么是装大神不实践单看API就回答你的.

480*800是的800是啥.屏幕高度..你应用是全屏显示的么.不是吧. 那就得在这个800上减去通知栏的高度啊..这个才是你应用程序的高度.

可能你会说. 那我直接叫美工切图时不切够800就行啦.减去通知栏高度切..你肯定所有手机的通知栏高度是一样的么?平板呢?非主流改通知栏高度呢? 坑死你...我就是这样被坑死的.

那么我们就要在代码中动态获取通知栏高度.减去..从面得到真正的应用程序高度A..这里暂时叫A.假设它是750高的.

你的图是800..实度背景高是750.那你的图肯定被压扁啦..怎么办呢.到这里.我只想到了一个折中的办法.

就是把 屏幕不能显示的那一部份图切割掉(我切的是图片底部)...这个是没办法的办法..将损失减到最少.

宽度让它去自适用..多出来的高度切换. 同理.如果是宽度多出来的话.就把宽度切掉,

因为Bitmap.createBitmap方法是把一个位图.从什么位置开始切到什么位置的. 这里你可以根据需要去慢慢灵活运用.

下面贴出它的代码.

至于还有一些坑爹的768*1280的这些屏幕. 同样可以用切割去处理..

下面代码中.XML代码就是一相对布局.里面没有任何东西.相对布局的宽度是父窗口自适应

public class MainActivity extends Activity {RelativeLayout a;@SuppressLint("NewApi")@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);a = (RelativeLayout)findViewById(R.id.a);//通知栏高度int i = getStatusBarHeight(this);Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.main_bg);DisplayMetrics metric = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(metric);int width = metric.widthPixels;     // 屏幕宽度(像素)int height = metric.heightPixels;   // 屏幕高度(像素)System.out.println(height);Bitmap bm1 = bm.createBitmap(bm, 0, 0, width, height-i);Drawable bd = new BitmapDrawable(getResources(), bm1);a.setBackground(bd);}//获取通知栏高度public static int getStatusBarHeight(Context context){Class<?> c = null;Object obj = null;Field field = null;int x = 0, statusBarHeight = 0;try {c = Class.forName("com.android.internal.R$dimen");obj = c.newInstance();field = c.getField("status_bar_height");x = Integer.parseInt(field.get(obj).toString());statusBarHeight = context.getResources().getDimensionPixelSize(x);} catch (Exception e1) {e1.printStackTrace();}return statusBarHeight;}}

andorid最新的不规则色彩背景图片自适应屏幕宽高,背景不变形相关推荐

  1. 手机banner图片自适应手机宽高定位

    <div class="image-header"><img src="../b1.jpg" alt="" />&l ...

  2. vue页面自适应屏幕宽高_Vue+Element UI 高度实时自适应

    本文章是我一个实习两个月的练习生,在项目中遇到的问题,在此记录,防治以后再踩坑!! Element ui 本身使用的Container 布局容器,组件采用 flex 布局.所以用了它的布局就可以做到宽 ...

  3. vue页面自适应屏幕宽高_vue组件页面高度根据屏幕大小自适应

    网页可见区域宽:document.body.clientWidth 网页可见区域高:document.body.clientHeight 网页可见区域宽:document.body.offsetWid ...

  4. vue页面自适应屏幕宽高_Vue 实现大屏页面的屏幕自适应

    1. 在配置文件设置大屏设计的尺寸1920*1080 //appConfig.js export default{ screen:{ width:1920, height:1080, scale:20 ...

  5. H5 背景图片自适应屏幕问题解决办法

    H5 背景图片自适应屏幕问题解决办法 参考文章: (1)H5 背景图片自适应屏幕问题解决办法 (2)https://www.cnblogs.com/nuanyang76/p/12068225.html ...

  6. 微信小程序 图片等比例缩放(图片自适应屏幕)

    index.wxml <!--图片宽高大于屏幕宽高--> <image style="width: {{imagewidth}}px; height: {{imagehei ...

  7. 微信小程序 图片等比例缩-放(图片自适应屏幕)

    1.wxml <!--图片宽高大于屏幕宽高--> <image style="width: {{imagewidth}}px; height: {{imageheight} ...

  8. 百度ueditor自适应(编辑器自适应页面,图片上传宽高,等)

    1.编辑器自适应页面 在实例化编辑器时加上 initialFrameWidth:'100%',//初始化编辑器宽度 代码 <!-- 加载编辑器的容器 --> <script id=& ...

  9. vue项目登录页背景图百分百铺满屏幕宽高自适应

    vue项目背景图百分百铺满屏幕宽高自适应 .login{background: url(../../../static/img/login/beijing@2x.png);background-siz ...

最新文章

  1. 【Android Gradle 插件】Module 目录下 build.gradle 配置文件 ( plugins 闭包代码块中引入插件 | PluginAware#apply 方法引入插件 )
  2. 14.ZooKeeper Java API 使用样例
  3. 解决Eclipse debug卡慢问题!!!
  4. PHP 5.6 开启CURL HTTPS 类型
  5. python中for x in range_python教程:对 [lambda x: x*i for i in range(4)] 理解
  6. adb过滤只查看某一个app的日志
  7. Spark执行任务卡死:SparkException: Failed to connect to driver! unable to launch application master
  8. iOS开发-retain/assign/strong/weak/copy/mutablecopy/autorelease区别
  9. pygame放大图片_使用Pygame进行游戏开发(3)--绘图
  10. 信使广告终结者 绿色
  11. 微信导航——引入百度地图api
  12. 樊登读书会2016年推荐书目汇总
  13. 深信服python二面面什么_深信服 python开发 北京 笔试一面二面 面经
  14. 多传感器数据融合发展综述
  15. 扬帆致远跨境电商:跨境电商品牌如何锁定真实用户
  16. 007 - 配置 Clion 调试显示 Qt 变量
  17. java学习路线规划
  18. 随笔日记2018 4.10 关于多选框
  19. 【book 120】My Brief History By Stephen Hawking
  20. react实现异步插件_react项目优化之webpack

热门文章

  1. arthas启动报错,找不到tools.jar,C:\Program Files (x86)\Common Files\Oracle\Java\javapath问题
  2. 缺少vcomp90.dll和msvcr90.dll
  3. Flink CDC入门实践--基于 Flink CDC 构建 MySQL 和 Postgres 的 Streaming ETL
  4. 身份证扫描识别ocr技术
  5. 基本分页存储管理方式
  6. Revit开发 - “附加模块”中添加“外部工具”
  7. 视盘检测 Accurate and Efficient Optic Disc Detection and Segmentation by a Circular Transformation
  8. mybatis 一级缓存和二级缓存
  9. Apache Kylin 和 Baidu Palo对比
  10. 海外拥有最庞大社区人群的Verasity($VRA),后市值得期待