【问题标题】:Android: How to override density and just use pixels?Android:如何覆盖密度并只使用像素?
【发布时间】:2026-02-10 03:25:01
【问题描述】:

我正在使用画布和位图来绘制圆形、矩形文本等图形,并希望我的图形例程使用基于真实屏幕分辨率(以像素为单位)的实际像素,就像在 PC 图形应用程序上一样。显然,Android 操作系统旨在使用密度来尝试为用户提供独立于实际设备屏幕尺寸和分辨率的良好体验。但是,当我发出设置像素 x,y 的命令时,最好实际设置像素 x,y 并且不让系统覆盖我的坐标 - 是否可以覆盖系统来设置像素 x,y?

例如,如果屏幕设置为 320x480(G1 或 Hero),它可以正常工作 - 但在屏幕为 800x600 的平板电脑 (IMX515) 上,图形总是水平拉伸。

我尝试设置不同密度的位图和画布,但没有任何效果 - 在平板电脑上,它们总是被拉伸以填充屏幕的宽度。 我也试过 Manifest

<supports-screens android:anyDensity=”true” />  

.

以下是一些基于 SurfaceView 的 sn-ps 代码:—

(1)在Bitmap中创建和设置(screenWidth、screenHeight来自metrics):-

backBitmap=Bitmap.createBitMap(screenWidth,screenHeight,Bitmap.config.ARGB_8888);

//backbitmap.setDensity(160)

backCanvas=new Canvas(backBitmap)

//backCanvas.setDensity(160);

.

(2)在绘图例程中:-

paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.RED); 
backCanvas.drawCircle(50,50,30,paint);

.

(3)在Canvas的onDraw方法中:-

protected void onDraw(Canvas canvas){
  if (drawingFlag==true){

    // canvas.setDensity(160)

     canvas.drawBitmap(backBitmap,0,0,null);
  }

}

。 . * 解决方案****** 令人惊讶的是我是多么草率 - 我一直在使用媒体播放器,并在创建 SurfaceView 时留下了以下代码:-

holder=mySurfaceView.getHolder();
holder.setFixedSize(320,480);

这是强制绘图为 320x480,然后在屏幕上缩放。 更改如下固定问题

holder.setFixedSize(800,600) 

【问题讨论】:

  • 问题是由我的代码中的错误引起的 - 我在上面进行了编辑以显示解决方案。
  • 您能否提供更多关于您是如何做到这一点的信息?

标签: android graphics


【解决方案1】:

。 . * 解决方案 ** 令人惊讶的是我是多么的草率 - 我一直在使用媒体播放器,并在创建 SurfaceView 时留下了以下代码:-

holder=mySurfaceView.getHolder();
holder.setFixedSize(320,480);

这是强制绘图为 320x480,然后在屏幕上缩放。更改如下固定问题

holder.setFixedSize(800,600)

【讨论】: