Rect类中的单位

时间:2013-12-27 08:26:11

标签: android size screen units-of-measurement rect

我的屏幕尺寸为854X480。

但是,当我使用drawRect(new Rect(0, 0, 570, 320), null)时,这将适合整个屏幕。

MainActivity.java

public class MainActivity extends Activity
{
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(new MainLayout(this));
  }
}
class MainLayout extends RelativeLayout
{
  public MainLayout(Context context)
  {
    super(context);
    setWillNotDraw(false);
  }
  @Override
  public void onDraw(Canvas canvas)
  {
    super.onDraw(canvas);
    setBackgroundColor(Color.WHITE);
    Paint paint = new Paint();
    paint.setColor(Color.BLACK);
    canvas.drawRect(new Rect(0, 0, 570, 320), paint);
  }
}

不应该是适合整个屏幕的canvas.drawRect(new Rect(0, 0, 854, 480), paint)吗? 为什么我在 Rect 类中使用的单位(在这种情况下为(570,320))与我的屏幕尺寸不同?

1 个答案:

答案 0 :(得分:2)

我认为那是因为你是硬编码像素,适合一个屏幕。更好的方法是根据设备密度进行扩展。这是方法。

public static int convertDpToPixel(float dp) {  
    return (int) (dp * (DEVICE_DENSITY_DPI / 160f));
}

将DEVICE_DENSITY_DPI定义为应用程序级别的全局对象:

DisplayMetrics metrics = new DisplayMetrics();
WindowManager windowManager = (WindowManager)getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
windowManager.getDefaultDisplay().getMetrics(metrics);

DEVICE_DENSITY_DPI = metrics.densityDpi;    

然后,按如下方式使用:

class MainLayout extends RelativeLayout
{
  final int WIDTH = convertDpToPixel(570);
  final int HEIGHT = convertDpToPixel(320);      

  public MainLayout(Context context)
  {
    super(context);
    setWillNotDraw(false);
  }

  @Override
  public void onDraw(Canvas canvas)
  {
    super.onDraw(canvas);
    setBackgroundColor(Color.WHITE);
    Paint paint = new Paint();
    paint.setColor(Color.BLACK);
    canvas.drawRect(new Rect(0, 0, WIDTH, HEIGHT), paint);
  }
}

现在值会根据设备的宽度和高度自动更改,同时也要确保使用属性match_parent布局MainLayout。

希望有所帮助。 :)