gpt4 book ai didi

android - 将 SurfaceView 中的 Canvas 缩放到大于屏幕尺寸的尺寸

转载 作者:太空宇宙 更新时间:2023-11-03 11:24:21 30 4
gpt4 key购买 nike

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

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

(屏幕将是横向的。这就是宽度大于高度的原因)意思是如果这个应用程序是为纵向设计的:

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

按 Canvas 通常的比例缩放:

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

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

您知道手机将如何对此作出回应吗?有些手机可以自动调整缩放比例,但这是通用功能还是只有部分手机才有的功能?

SurfaceView 在 Activity 中激活并使用 setContentView 设置:

@Override
public void onCreate(Bundle sis){
super.onCreate(sis);

CustomSurfaceView sf = new CustomSurfaceView(this);
setContentView(sf);
//initialize
sf.init(this, this);

}

编辑

澄清一下:

我正在将 Canvas 缩放到与 HD 1080 分辨率相同的特定尺寸。 HD 1080 屏幕与屏幕相比不会做任何缩放。 2K 屏幕将缩放至高清 1080 分辨率,这意味着它的分辨率将低于屏幕的最大适合度。
HD1080 尺寸为 1080x1920,将应用于小于该尺寸的屏幕上的 Canvas 。
但是缩放将如何作用于 HD 720 屏幕或通常比 HD 1080 更差的分辨率?该应用程序将插入比屏幕支持更大的尺寸。手机将对此做出什么 react ?


在 nexus 模拟器(nexus 4,api 23)上运行应用程序会导致 Canvas 被稍微推离屏幕。并非所有手机都像 nexus 一样运行,因为制造商已经编辑了固件,所以仅仅因为它在 Nexus 上从屏幕上消失并不意味着它会在索尼或任何其他品牌上出现


注意:除非另有定义,否则 HD 指的是 HD 1080。

最佳答案

不要硬编码解析。不推荐。 Android 具有在绘图时使用 DP 单位缩放图形的内置机制。 detail on unit
通过dps * getResources().getDisplayMetrics().density将DP转换为像素detail
同时浏览官方文档

顺便说一句,在固定的 HD-1080 Canvas 上绘图,然后调整其大小以适应其他分辨率,其工作方式如下。

  • 让您的 CustomSurfaceView 全屏显示设备。 (不要像 Canvas 一样硬编码 View 的大小)
  • 对 xScale 和 yScale 使用相同的 scaleFactor 以保持比率。请记住,在纵横比不是 16:9 的设备中,您会在侧面看到黑屏。 (您可以将 Canvas 重新定位到中心并在两侧绘制某种框架)
  • 使用以下代码计算比率。 (帮助来自 herehere )

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

关于android - 将 SurfaceView 中的 Canvas 缩放到大于屏幕尺寸的尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41244673/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com