一、控件
获得控件的宽、高:getWidth(),getHeight()。每次刷新有可能不一样。
真实宽高:xxx.getLayoutParams().height。 固定值,比较准确。
获得控件左边相对于父视图坐标原点(左上角)的距离:getLeft();(其他类似) 以左右为X轴,上下为Y轴
getRight()=getLeft()+getWidth().getBottom()=getTop()+getHeight()
设置控件大小:layout(int left, int top, int right, int bottom);
注意:必须在绘制完成后才能获取布局、控件的宽高!否则会为0或者负数。
解决方法:监听绘制事件
ViewTreeObserver vto = controlLayout.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
controlLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
int controlLayoutWidth=controlLayout.getWidth();
Log.i("menu", "controlLayoutWidth:"+controlLayoutWidth);
mPathMenuLayout.setChildSize(controlLayoutWidth);
}
});
二、屏幕
DisplayMetrics dm = new DisplayMetrics();
window.getWindowManager().getDefaultDisplay().getMetrics(dm); // 取得窗口属性
获得屏幕的宽度:dm.widthPixels; // 窗口的宽度(以像素计算)
获得屏幕的高度:dm.heightPixels; // 窗口的宽度
获得标题栏的高度:window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
三、触摸事件
以屏幕左上角为坐标原点,获得当前触摸的坐标:event.getRawX()、event.getRawY()