Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 矩形类中的单位_Android_Size_Screen_Units Of Measurement_Rect - Fatal编程技术网

Android 矩形类中的单位

Android 矩形类中的单位,android,size,screen,units-of-measurement,rect,Android,Size,Screen,Units Of Measurement,Rect,我有854X480 android屏幕大小 但是,当我使用drawRect(newrect(0,0570320),null)时,这将适合整个屏幕 MainActivity.java public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setC

我有854X480 android屏幕大小

但是,当我使用
drawRect(newrect(0,0570320),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(新的Rect(0,085480),paint)来适应整个屏幕吗?
为什么我在Rect类中使用的单位(在本例中为570320)与我的屏幕大小不同?

我认为这是因为你是硬编码像素,适合一个屏幕。更好的方法是根据设备密度来扩展它们。下面是实现这一点的方法

public static int convertDpToPixel(float dp) {  
    return (int) (dp * (DEVICE_DENSITY_DPI / 160f));
}
将设备密度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);
  }
}
现在,这些值将根据设备的宽度和高度自动更改,同时确保布局MainLayout的属性与\u parent匹配


希望有帮助。:)

非常感谢你的解释