我的屏幕尺寸为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))与我的屏幕尺寸不同?
答案 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。
希望有所帮助。 :)