我正在制作一款新应用,而我正在使用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;
画布通常为:
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);
}
}
今天的大多数手机都是高清或更好的,很少有更差的分辨率。但仍然有手机,我担心缩放将如何对其他非高清/更好的手机作出反应,因为我的应用程序将推动比屏幕支持更好的分辨率。
任何想法手机将如何回应这个?有些手机可以自动调整缩放比例,但只是某些手机有普通功能或功能吗?
SurfaceView在Activity中激活,并使用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 720屏幕上进行缩放,或者通常比HD 1080更差的分辨率?该应用程序将推动比屏幕支持更大的尺寸。手机将如何应对?
在nexus仿真器(nexus 4,api 23)上运行应用程序会导致画布稍微离开屏幕。并非所有手机都像nexus一样,因为固件已经由制造商编辑,所以仅仅因为它在Nexus的屏幕上显示并不意味着它将出现在Sony或任何其他品牌上
注意:HD除非另有定义,否则引用HD 1080。
答案 0 :(得分:-1)
不要硬编码解决方案。不推荐。 Android具有内置机制,可在绘图时使用DP单元缩放图形。 detail on unit
按dps * getResources().getDisplayMetrics().density
detail将DP转换为像素
还要浏览官方文档
顺便使用固定的HD-1080画布,然后调整其他分辨率的大小将如下工作。
CustomSurfaceView
全屏显示设备。 (不要像画布那样硬编码视图的大小)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
}
}