Android绘图的多分辨率自适应

本文探讨了Android中自定义View绘图时如何处理画布与屏幕大小的关系,包括非等比例缩放、等比例缩放并裁剪以及等比例缩放并留白三种策略。非等比例缩放可能导致画面变形,等比例策略则能保持画面比例,但可能需要裁剪或留白来适应屏幕。
摘要由CSDN通过智能技术生成

Android中的自定义绘图和利用布局文件的绘图不太一样,布局文件的设计基本决定了UI的显示效果,而自定义View绘图时,所绘制的画面并不直接等同于屏幕上显示的效果,通常还需要进行画布到屏幕的映射处理,此时就需要考虑画布大小和屏幕大小的缩放关系,常用的处理方式有以下三种。

(1)非等比例缩放

将画布按照屏幕的实际宽度和高度分别做比例缩放,使画布充满整个屏幕。但由于可能改变了画布的原有比例,画布中所绘制对象的原有比例也可能发生改变,从而导致对象的比例被拉伸或缩小,一定程度会影响到画面的整体效果。

处理非等比例缩放的主要工作时确定画布左上角在屏幕上的起始坐标,此时一般为(0,0)点,同时还要分别计算画布的宽、高相对于屏幕的宽、高缩放比。

public static void ScreenScaleWithNotEqualRatio(){//非等比例缩放
                                                    //直接计算宽高比
        decideScreenOrientation();

        if(screenOrient == LANDSCAPE){//横屏时
            ratio1 = SCREEN_HEIGHT / sHpHeight;//横屏高度缩放比
            ratio2 = SCREEN_WIDTH / sHpWidth;//横屏宽度缩放比

            x = 0;
            y = 0;
        }

        if(screenOrient == PORTRAIT){//竖屏时
            ratio1 = SCREEN_HEIGHT / sSpHeight;//竖屏高度缩放比
            ratio2 = SCREEN_WIDTH / sSpWidth;//竖屏宽度缩放比

            x = 0;
            y = 0;
        }
        return;
    }

(2)等比例缩放并裁剪

将画布按照某条边(宽或高)做等比例缩放,在保持画布原有比例的同时,使画布和屏幕在该边上相等,而另一条边上画布超出屏幕,此时可以计算超出屏幕的边上的起始坐标,再将画布平移,使某部分超出屏幕,从而实现“裁剪”。

此时的主要工作是计算画布的整体缩放比例,以及画布左上角的起始坐标。

public static void ScreenScaleWithEqualRatioAndCrop(){//等比例缩放并裁剪
                                                        //需计算左上角x、y坐标用于移动画布,实现“裁剪”
        decideScreenOrientation();

        if(screenOrient == LANDSCAPE){//横屏时
            ratio = SCREEN_HEIGHT/sHpHeight;
            float width = sHpWidth*ratio;

            if(width > SCREEN_WIDTH){
                x = (int)(SCREEN_WIDTH - 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值