将 SurfaceView 中的画布缩放到大于屏幕大小的大小



我正在制作一个新应用,我正在使用画布。我正在缩放画布,但我将大小设置为:

public static final int WIDTH =  1920;
public static final int HEIGHT = 1080;

(屏幕将在景观中。这就是为什么宽度大于高度的原因)意味着如果此应用程序用于肖像方向:

public static final int WIDTH =  1080;
public static final int HEIGHT = 1920;

按比例缩放,因为画布通常是:

public void render(Canvas c) {
    super.draw(c);
    final float scaleFactorX = getWidth()/(WIDTH*1.f);
    final float scaleFactorY = getHeight()/(HEIGHT*1.f);
    if (c != null) {
        final int savedState = c.save();
        c.scale(scaleFactorX, scaleFactorY);
        /////render

        /////render end
        c.restoreToCount(savedState);
    }
}

当今大多数手机都是高清或更高的,很少有分辨率更差。但是仍然有电话,我担心缩放率在其他非HD/更好的手机上的反应如何,因为我的应用程序将推动比屏幕支持更好的分辨率。

手机对此有何响应?有些手机可以自动调整缩放,但是一般函数或功能只有某些手机具有?

表面视图在活动中被激活,并使用setContentView:

进行集合。
@Override
public void onCreate(Bundle sis){
    super.onCreate(sis);
    CustomSurfaceView sf = new CustomSurfaceView(this);
    setContentView(sf);
    //initialize
    sf.init(this, this);
}

编辑

澄清:

我将画布缩放到与HD 1080分辨率相同的特定尺寸。与屏幕相比,HD 1080屏幕不会进行任何缩放。2K屏幕将扩展到HD 1080分辨率,这意味着它的分辨率将比屏幕的最大拟合度更低。
HD1080尺寸为1080x1920,将应用于小于该大小的屏幕上的画布。
但是,与HD 1080相比,缩放率将如何在HD 720屏幕上起作用或更糟糕的分辨率?该应用将推出比屏幕支撑更大的尺寸。手机将如何反应?


在Nexus仿真器上运行该应用程序(Nexus 4,API 23)会导致略微从屏幕上推开的画布。并非所有手机都像固定器那样由固件进行编辑,而是由制造商编辑,所以仅仅因为它脱离了Nexus的屏幕,并不意味着它将在Sony或任何其他品牌上


注意:HD引用对HD 1080,除非另有定义。

不要硬码解决。不建议。Android具有在绘图时使用DP单元来扩展图形的构建机制。单位的详细信息
通过dps * getResources().getDisplayMetrics().density细节将DP转换为像素
也浏览官方文档

  • 支持多个屏幕
  • 屏幕尺寸和密度

顺便说一句,在固定的HD-1080画布上绘制绘制,然后将其调整为其他分辨率的大小如下。

  • 让您的CustomSurfaceView全屏进行设备的全屏。(不要像画布那样硬代码大小)
  • 使用相同的比例尺进行XScale和Yscale来保持比率。请记住,您将在具有16:9纵横比以外的其他设备中获得黑屏。(您可以将画布重新放置为中心并在侧面绘制某种框架)
  • 使用以下代码计算比率。(从这里和这里获得帮助)

public void render(Canvas c) {
    super.draw(c);
    float scaleFactor = 1f;
    if ((getWidth()> 0) || (getHeight() > 0)) {
        scaleFactor = Math.min(WIDTH/getWidth()*1f, HEIGHT/getHeight()*1f);
    }
    if (c != null) {
        c.scale(scaleFactor, scaleFactor );
        //your code
    }
 }

最新更新