android 控件设置GONE,其实父布局就已经重绘了,在开发一个功能时,遇到一个问题,就是布局重绘(GONE,QQ消息状态栏弹框等)导致某个控制设置的坐标无效而回到原点,先上代码
private void updateVirtualCursorXY(int l, int t, int r, int b) {
try {
// pc_control_cursor.layout(l, t, r, b);
// pc_control_cursor.postInvalidate();
moveView(pc_control_cursor, l, t,r, b, pc_control_cursor.getWidth(), pc_control_cursor.getHeight());
} catch (Exception e) {
e.printStackTrace();
}
}
private void moveView(View v, int left, int top, int right, int bottom, int width, int height) {
// RelativeLayout.LayoutParams params = null;
// params = new RelativeLayout.LayoutParams(width, height);
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) v.getLayoutParams();
params.width = (int)(CURSOR_WIDTH * Utils.getScreenDensity());
params.height = (int)(CURSOR_HEIGHT * Utils.getScreenDensity());
params.leftMargin = left;
params.topMargin = top;
params.rightMargin = viewWidth - right;
params.bottomMargin = viewHeight - bottom;
v.setLayoutParams(params);
}
函数updateVirtualCursorXY可以看到是为了更新控件的坐标,最初用的是被屏蔽的两行代码用来更新控件坐标,后来发现只要布局重绘就会导致控件回到原点,网上查了资料发现当view的位置发生改变时,也要相应改变其layoutparams,否则父布局重绘时,由于view的layoutparams没发生改变导致重绘的时候会回到原点,所以只要改变其params就好了。