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;
    }
    
}




背景图片自适应大小(css3)

body {             background: url(/happytime/img/index.jpg) no-repeat center center fixed;  ...
  • mr_orange_klj
  • mr_orange_klj
  • 2015年01月16日 15:12
  • 11786

html 背景图片实现 宽度自适应,高度为背景图片高度 解决发案

body{background-image: url("/i/bg_flower.gif");background-position: center center; background-repeat...
  • LANGZI7758521
  • LANGZI7758521
  • 2016年05月03日 16:48
  • 2988

android 背景图片的变形(background)

这是我因为这个问题第二次影响开发效果了,第一次遇到时解决了一下,中间也遇到过它,都给解决了,但是一段时间后遗忘了,现在把它记下: 对button的背景设置为一张图片,发现在hdpi下引用的图片变形,...
  • q10123
  • q10123
  • 2015年06月08日 17:06
  • 1933

Bootstrap 关于背景图像的自适应和行的栅格化

Bootstrap 是基于列来栅格化网页的,因此使用它,麻烦就在于行坐标难以确定,bootstrap 是根据列坐标来实现页面编辑的。 Bootstrap 在初次使用时的一些感受 它在行编辑的同时,实...
  • u013630349
  • u013630349
  • 2016年08月18日 19:38
  • 3703

背景图片如何自适应屏幕

自己比较头疼的问题,网上搜了好多资料,大概整理了一下 1. 直接设置CSS样式达到目的    在以上代码中,background-size: cover;是对背景图进行等比例拉伸,仍然存在图片显示...
  • yinkaihui
  • yinkaihui
  • 2015年10月12日 23:59
  • 24386

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

【CSS背景图片页面自适应充满屏幕】 实现代码: body {                                         overflow: hidde...
  • M_agician
  • M_agician
  • 2017年06月29日 00:21
  • 6925

ie和火狐兼容性问题(ie背景自适应)

今天有些收获,在这里记录一下。 css方面的,ie和火狐的兼容性。 div里有个background属性,设置背景图片自适应。 火狐问题不大,一段代码搞定 background: url('i...
  • yipanbo
  • yipanbo
  • 2015年04月11日 23:40
  • 1850

修改背景图片居中并自适应宽度的css

BODY {background-image: URL(photo/picture1.jpg);background-position: center;background-repeat: no-re...
  • younger_z
  • younger_z
  • 2017年02月17日 10:53
  • 1204

CSS背景图拉伸自适应尺寸,全浏览器兼容

突然有人问我这个问题,说网上CSS filter的方法在非IE浏览器下不奏效。思考之后,问题之外让我感慨万千啊,很多我们所谓的难题,都会随着时代的发展迎刃而解,或被新的问题所取代。 当CSS背景图片...
  • liuzp111
  • liuzp111
  • 2015年04月30日 10:23
  • 843

android 防止背景图片被拉伸 背景图片平铺

android layout布局文件设置背景图片只需要加上 android:background="@drawable/ic_bg"  就可以了ic_bg为资源里的图片 然而这样设置后当图片较小时会...
  • dxswzj
  • dxswzj
  • 2013年09月07日 11:45
  • 5298
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:andorid最新的不规则色彩背景图片自适应屏幕宽高,背景不变形
举报原因:
原因补充:

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