andorid最新的不规则色彩背景图片自适应屏幕宽高,背景不变形
先在这里吐槽一下万恶的客户改需求...
再说一句...网上大部份资料都是坑爹的.因为不是针对你需求来写的....别照抄..你只能从多种答案中总结出自己的代码.自己的方法
所谓不规则背景图片是指色彩不同统.不是图形不规则. ----如户外照片
在安卓中.为了尽量避免布局问题.我们一般都是尽量使用统一色调或有一定变色规律的图片作为背景.因为这样易处理. 用.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最新的不规则色彩背景图片自适应屏幕宽高,背景不变形相关推荐
- 手机banner图片自适应手机宽高定位
<div class="image-header"><img src="../b1.jpg" alt="" />&l ...
- vue页面自适应屏幕宽高_Vue+Element UI 高度实时自适应
本文章是我一个实习两个月的练习生,在项目中遇到的问题,在此记录,防治以后再踩坑!! Element ui 本身使用的Container 布局容器,组件采用 flex 布局.所以用了它的布局就可以做到宽 ...
- vue页面自适应屏幕宽高_vue组件页面高度根据屏幕大小自适应
网页可见区域宽:document.body.clientWidth 网页可见区域高:document.body.clientHeight 网页可见区域宽:document.body.offsetWid ...
- vue页面自适应屏幕宽高_Vue 实现大屏页面的屏幕自适应
1. 在配置文件设置大屏设计的尺寸1920*1080 //appConfig.js export default{ screen:{ width:1920, height:1080, scale:20 ...
- H5 背景图片自适应屏幕问题解决办法
H5 背景图片自适应屏幕问题解决办法 参考文章: (1)H5 背景图片自适应屏幕问题解决办法 (2)https://www.cnblogs.com/nuanyang76/p/12068225.html ...
- 微信小程序 图片等比例缩放(图片自适应屏幕)
index.wxml <!--图片宽高大于屏幕宽高--> <image style="width: {{imagewidth}}px; height: {{imagehei ...
- 微信小程序 图片等比例缩-放(图片自适应屏幕)
1.wxml <!--图片宽高大于屏幕宽高--> <image style="width: {{imagewidth}}px; height: {{imageheight} ...
- 百度ueditor自适应(编辑器自适应页面,图片上传宽高,等)
1.编辑器自适应页面 在实例化编辑器时加上 initialFrameWidth:'100%',//初始化编辑器宽度 代码 <!-- 加载编辑器的容器 --> <script id=& ...
- vue项目登录页背景图百分百铺满屏幕宽高自适应
vue项目背景图百分百铺满屏幕宽高自适应 .login{background: url(../../../static/img/login/beijing@2x.png);background-siz ...
最新文章
- 【Android Gradle 插件】Module 目录下 build.gradle 配置文件 ( plugins 闭包代码块中引入插件 | PluginAware#apply 方法引入插件 )
- 14.ZooKeeper Java API 使用样例
- 解决Eclipse debug卡慢问题!!!
- PHP 5.6 开启CURL HTTPS 类型
- python中for x in range_python教程:对 [lambda x: x*i for i in range(4)] 理解
- adb过滤只查看某一个app的日志
- Spark执行任务卡死:SparkException: Failed to connect to driver! unable to launch application master
- iOS开发-retain/assign/strong/weak/copy/mutablecopy/autorelease区别
- pygame放大图片_使用Pygame进行游戏开发(3)--绘图
- 信使广告终结者 绿色
- 微信导航——引入百度地图api
- 樊登读书会2016年推荐书目汇总
- 深信服python二面面什么_深信服 python开发 北京 笔试一面二面 面经
- 多传感器数据融合发展综述
- 扬帆致远跨境电商:跨境电商品牌如何锁定真实用户
- 007 - 配置 Clion 调试显示 Qt 变量
- java学习路线规划
- 随笔日记2018 4.10 关于多选框
- 【book 120】My Brief History By Stephen Hawking
- react实现异步插件_react项目优化之webpack
热门文章
- arthas启动报错,找不到tools.jar,C:\Program Files (x86)\Common Files\Oracle\Java\javapath问题
- 缺少vcomp90.dll和msvcr90.dll
- Flink CDC入门实践--基于 Flink CDC 构建 MySQL 和 Postgres 的 Streaming ETL
- 身份证扫描识别ocr技术
- 基本分页存储管理方式
- Revit开发 - “附加模块”中添加“外部工具”
- 视盘检测 Accurate and Efficient Optic Disc Detection and Segmentation by a Circular Transformation
- mybatis 一级缓存和二级缓存
- Apache Kylin 和 Baidu Palo对比
- 海外拥有最庞大社区人群的Verasity($VRA),后市值得期待