如何在android中的每个屏幕分辨率中正确绘制画布位图

时间:2011-11-15 07:08:53

标签: android canvas

我使用画布在屏幕上显示一些纹理,我可以在屏幕上显示它们。我面临的唯一问题是,它在模拟器中运行良好但是当涉及到设备时纹理被分散了这个是由于屏幕分辨率的差异。你告诉我如何解决这个问题

这是我在屏幕上放置纹理的代码

                   Bitmap bitmap = BitmapFactory.decodeResource(mcontext.getResources(), R.drawable.dial);
                   canvas.drawBitmap(bitmap, canvas.getWidth()/10, canvas.getHeight()/4, null);


                   Bitmap bitmap1 = BitmapFactory.decodeResource(mcontext.getResources(), R.drawable.browser);
                   //canvas.drawBitmap(bitmap1, bitmap.getWidth()/4 ,canvas.getHeight()/2, null);
                   canvas.drawBitmap(bitmap1, canvas.getWidth()/5 ,canvas.getHeight()/2, null);


                   Bitmap bitmap2 = BitmapFactory.decodeResource(mcontext.getResources(), R.drawable.camera);
                   canvas.drawBitmap(bitmap2, canvas.getWidth()/10 + bitmap.getWidth()/6,canvas.getHeight()/3, null);

1 个答案:

答案 0 :(得分:2)

您基本上需要转换画布,以便始终使用可预测的坐标系。如果您不熟悉坐标系,那么您可能希望阅读它,但基本思路是:

  • 确定您希望画布有多大
  • 确定您的屏幕有多大
  • 缩放画布,使其坐标与屏幕的坐标相匹配
  • 根据您自己定义的坐标系统绘制尺寸和坐标的位图。

示例:

您想在画布上绘制640x480。 您的屏幕分辨率为800x400。 在x方向上按(800/640)缩放画布,在y方向上缩放(480/400)。 现在坐标0,0位于左上角,640,480位于右下角。根据需要绘制。

你可以明显地调整它来考虑宽高比和诸如此类的东西,但想法是你想根据自己的坐标系定义位图的大小和位置,而不仅仅是设备给你的分辨率。