Add FrameView and LinearView
This commit is contained in:
1 parent
8bfffcda1f
commit
afe28f866a
3 files changed
+198
No files matched your search
@@ -0,0 +1,82 @@
|
||||
package com.hippo.ehviewer.gallery.ui;
|
||||
|
||||
public class FrameView extends GLView {
|
||||
|
||||
@Override
|
||||
protected void onMeasure(int widthSpec, int heightSpec) {
|
||||
int maxWidth = 0;
|
||||
int maxHeight = 0;
|
||||
for (int i = 0, n = getComponentCount(); i < n; i++) {
|
||||
GLView component = getComponent(i);
|
||||
measureComponent(component, widthSpec, heightSpec);
|
||||
maxWidth = Math.max(maxWidth, component.getMeasuredWidth());
|
||||
maxHeight = Math.max(maxHeight, component.getMeasuredHeight());
|
||||
}
|
||||
|
||||
// Consider min
|
||||
maxWidth = Math.max(maxWidth, getMinimumWidth());
|
||||
maxHeight = Math.max(maxHeight, getMinimumHeight());
|
||||
|
||||
// The final
|
||||
maxWidth = getDefaultSize(maxWidth, widthSpec);
|
||||
maxHeight = getDefaultSize(maxHeight, heightSpec);
|
||||
|
||||
setMeasuredSize(maxWidth, maxHeight);
|
||||
|
||||
if (MeasureSpec.getSize(widthSpec) != MeasureSpec.EXACTLY ||
|
||||
MeasureSpec.getSize(heightSpec) != MeasureSpec.EXACTLY) {
|
||||
// Measure again
|
||||
measureAllComponents(this, MeasureSpec.makeMeasureSpec(maxWidth, MeasureSpec.EXACTLY),
|
||||
MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.EXACTLY));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onLayout(boolean changeSize, int left, int top, int right, int bottom) {
|
||||
int width = getWidth();
|
||||
int height = getHeight();
|
||||
|
||||
for (int i = 0, n = getComponentCount(); i < n; i++) {
|
||||
GLView component = getComponent(i);
|
||||
int measureWidth = component.getMeasuredWidth();
|
||||
int measureHeight = component.getMeasuredHeight();
|
||||
int componentLeft;
|
||||
int componentTop;
|
||||
|
||||
GravityLayoutParams lp = (GravityLayoutParams) component.getLayoutParams();
|
||||
int gravity = lp.gravity;
|
||||
if (Gravity.centerHorizontal(gravity)) {
|
||||
componentLeft = (width / 2) - (measureWidth / 2);
|
||||
} else if (Gravity.right(gravity)) {
|
||||
componentLeft = width - measureWidth;
|
||||
} else {
|
||||
componentLeft = 0;
|
||||
}
|
||||
if (Gravity.centerVertical(gravity)) {
|
||||
componentTop = (height / 2) - (measureHeight / 2);
|
||||
} else if (Gravity.bottom(gravity)) {
|
||||
componentTop = height - measureHeight;
|
||||
} else {
|
||||
componentTop = 0;
|
||||
}
|
||||
|
||||
component.layout(componentLeft, componentTop,
|
||||
componentLeft + measureWidth, componentTop + measureHeight);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean checkLayoutParams(GLView.LayoutParams p) {
|
||||
return p instanceof GravityLayoutParams;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected LayoutParams generateDefaultLayoutParams() {
|
||||
return new GravityLayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected LayoutParams generateLayoutParams(GLView.LayoutParams p) {
|
||||
return p == null ? generateDefaultLayoutParams() : new GravityLayoutParams(p);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.hippo.ehviewer.gallery.ui;
|
||||
|
||||
public class Gravity {
|
||||
|
||||
public static final int NO_GRAVITY = 0x0000;
|
||||
|
||||
public static final int LEFT = 0x0001;
|
||||
public static final int TOP = 0x0002;
|
||||
public static final int RIGHT = 0x0004;
|
||||
public static final int BOTTOM = 0x0008;
|
||||
|
||||
public static final int CENTER_HORIZONTAL = LEFT | RIGHT;
|
||||
public static final int CENTER_VERTICAL = TOP | BOTTOM;
|
||||
public static final int CENTER = CENTER_VERTICAL|CENTER_HORIZONTAL;
|
||||
|
||||
public static final int HORIZONTAL_MASK = CENTER_HORIZONTAL;
|
||||
public static final int VERTICAL_MASK = CENTER_VERTICAL;
|
||||
|
||||
public static boolean centerHorizontal(int gravity) {
|
||||
return (gravity & HORIZONTAL_MASK) == CENTER_HORIZONTAL;
|
||||
}
|
||||
|
||||
public static boolean right(int gravity) {
|
||||
return (gravity & HORIZONTAL_MASK) == RIGHT;
|
||||
}
|
||||
|
||||
public static boolean left(int gravity) {
|
||||
return (gravity & HORIZONTAL_MASK) == LEFT;
|
||||
}
|
||||
|
||||
public static boolean centerVertical(int gravity) {
|
||||
return (gravity & VERTICAL_MASK) == CENTER_VERTICAL;
|
||||
}
|
||||
|
||||
public static boolean top(int gravity) {
|
||||
return (gravity & VERTICAL_MASK) == TOP;
|
||||
}
|
||||
|
||||
public static boolean bottom(int gravity) {
|
||||
return (gravity & VERTICAL_MASK) == BOTTOM;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
package com.hippo.ehviewer.gallery.ui;
|
||||
|
||||
public class LinearView extends GLView {
|
||||
|
||||
public int mInterval;
|
||||
|
||||
public void setInterval(int interval) {
|
||||
mInterval = interval;
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
// TODO
|
||||
@Override
|
||||
protected void onMeasure(int widthSpec, int heightSpec) {
|
||||
measureAllComponents(this, widthSpec, heightSpec);
|
||||
|
||||
int maxWidth = 0;
|
||||
int maxHeight = 0;
|
||||
int n = getComponentCount();
|
||||
for (int i = 0; i < n; i++) {
|
||||
GLView component = getComponent(i);
|
||||
maxWidth = Math.max(maxWidth, component.getMeasuredWidth());
|
||||
if (i != 0) {
|
||||
maxHeight += mInterval;
|
||||
}
|
||||
maxHeight += component.getMeasuredHeight();
|
||||
}
|
||||
|
||||
setMeasuredSize(getDefaultSize(maxWidth, widthSpec), getDefaultSize(maxHeight, heightSpec));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onLayout(boolean changeSize, int left, int top, int right, int bottom) {
|
||||
int width = getWidth();
|
||||
int componentLeft;
|
||||
int componentTop = 0;
|
||||
|
||||
for (int i = 0, n = getComponentCount(); i < n; i++) {
|
||||
GLView component = getComponent(i);
|
||||
int measureWidth = component.getMeasuredWidth();
|
||||
int measureHeight = component.getMeasuredHeight();
|
||||
|
||||
GravityLayoutParams lp = (GravityLayoutParams) component.getLayoutParams();
|
||||
int gravity = lp.gravity;
|
||||
if (Gravity.centerHorizontal(gravity)) {
|
||||
componentLeft = (width / 2) - (measureWidth / 2);
|
||||
} else if (Gravity.right(gravity)) {
|
||||
componentLeft = width - measureWidth;
|
||||
} else {
|
||||
componentLeft = 0;
|
||||
}
|
||||
|
||||
component.layout(componentLeft, componentTop,
|
||||
componentLeft + measureWidth, componentTop + measureHeight);
|
||||
|
||||
componentTop += measureHeight + mInterval;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean checkLayoutParams(GLView.LayoutParams p) {
|
||||
return p instanceof GravityLayoutParams;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected LayoutParams generateDefaultLayoutParams() {
|
||||
return new GravityLayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected LayoutParams generateLayoutParams(GLView.LayoutParams p) {
|
||||
return p == null ? generateDefaultLayoutParams() : new GravityLayoutParams(p);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user