我正在制作一个新的应用程序,我正在使用画布。我正在缩放画布,但我将大小设置为:
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在活动中激活,并使用setcontentview设置:
@Override
public void onCreate(Bundle sis){
super.onCreate(sis);
CustomSurfaceView sf = new CustomSurfaceView(this);
setContentView(sf);
//initialize
sf.init(this, this);
}
编辑
澄清:
我正在将画布缩放到与hd 1080分辨率相同的特定大小。HD1080屏幕与屏幕相比不会进行任何缩放。2K屏幕将缩放到高清1080分辨率,这意味着它的分辨率将低于屏幕的最大适合度。
HD1080大小为1080x1920,将应用于屏幕上小于该大小的画布。
但是,这种缩放在高清720屏幕上会起到什么作用,或者在一般情况下会比高清1080的分辨率更差?这款应用将推出比屏幕支持更大的尺寸。手机对此会有什么反应?
在NexusEmulator(Nexus4,API23)上运行应用程序会导致画布被稍微推离屏幕。并不是所有的手机都像Nexus一样,因为固件是由制造商编辑的,所以仅仅因为它在Nexus的屏幕上消失并不意味着它会出现在索尼或其他品牌上
注:HD参考HD 1080,除非另有规定。
最佳答案
不要硬代码解析。不推荐。android有内置的机制,可以在绘图时使用dp单元来缩放图形。detail on unit
通过dps * getResources().getDisplayMetrics().density
detail将dp转换为像素
同时浏览官方文档
Supporting Multiple Screens
Screen Sizes and Densities
顺便说一下,在固定的hd-1080画布上绘制,然后根据其他分辨率调整其大小,将按如下方式工作。
让您的CustomSurfaceView
全屏显示设备。(不要像画布那样硬编码视图的大小)
对xscale和yscale使用相同的scalefactor以保持比率。请记住,如果设备的纵横比不是16:9,则会在侧面显示黑屏。(您可以将画布重新定位到中心并在侧面绘制某种框架)
使用以下代码计算比率。(帮助来自here和here)
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
}
}