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

原创 2014年03月22日 02:17:53

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

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

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


在安卓中.为了尽量避免布局问题.我们一般都是尽量使用统一色调或有一定变色规律的图片作为背景.因为这样易处理. 用.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")
	@Override
    public 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;
    }
    
}




相关文章推荐

Android如何从图片中切取人脸区域?

从一张图片中切出人脸区域是App开发中常用的场景,譬如,现在很多App用户上传头像的时候,喜欢随手自拍。自拍的图片往往在尺寸、位置上并不完美。而App需要在各种千奇百怪的UI场景下显示用户的头像。所以...
  • aliankg
  • aliankg
  • 2016年04月12日 16:30
  • 667

android以不规则图片为边框,切割另外的图片

转自: 最近工作上遇到了一个将一个图片按照相框进行裁剪的问题,花了一个下午研究了下,在此整理一下,以便后用。           +            =      ...

用background-size实现 背景图片自适应浏览器大小,但不变形

很多flash站都用到了一张背景图,然后根据浏览器大小自动缩放,但图片不变形。 在CSS3中,有属性: background-size: cover;  //只支持IE9+ -webkit-ba...

【CSS背景图片页面自适应充满屏幕】

【CSS背景图片页面自适应充满屏幕】 实现代码: body {                                         overflow: hidde...

Android对于界面底部N个按钮平分屏幕宽度且保持按钮背景图片不变形的解决方案

我们有时候会用到类似桌面底部那样的导航栏,但是有些背景图片不能做成.9.png格式的,如果我们采用Button的方式来实现,会存在很多问题,比如背景图片被拉伸变形导致界面很难看,而且如果在布局文件中用...
  • hui3909
  • hui3909
  • 2013年07月19日 17:01
  • 1860

游戏背景自适应屏幕分辨率

原文: Unity 3D 正交(Orthographic)摄像机尺寸学习笔记 在 Unity 3D 中可以把摄像机设置为正交。正交摄像机与 Unity 3D 中普通摄像...

MFC对话框控件和背景图片自适应窗口最大化和拉伸缩放的实现

原文地址:MFC对话框控件和背景图片自适应窗口最大化和拉伸缩放的实现作者:406603288  转自http://hi.baidu.com/peter_niu_alex/blog/item/...

纯CSS控制背景图片100%自适应填充布局

原文:http://www.uedsc.com/css-background-size-100.html 解决: html,body{height: 100%;width: 100%;margin...
  • wd4java
  • wd4java
  • 2016年01月18日 16:32
  • 62559

CSS背景图片自适应、全屏、填充、拉伸

方法一、 js控制: 1 2 3 div id="formbackground" style="position:absolute; widt...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:andorid最新的不规则色彩背景图片自适应屏幕宽高,背景不变形
举报原因:
原因补充:

(最多只允许输入30个字)