Android 矩形类中的单位
我有854X480 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
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匹配
希望有帮助。:) 非常感谢你的解释