我正在制作一个新应用,我正在使用画布。我正在缩放画布,但我将大小设置为:
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
}
}