/* * Copyright (C) 2006 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.view; import android.graphics.Rect; /** * Standard constants and tools for placing an object within a potentially * larger container. */ public class Gravity { /** Contstant indicating that no gravity has been set **/ public static final int NO_GRAVITY = 0x0000; /** Raw bit indicating the gravity for an axis has been specified. */ public static final int AXIS_SPECIFIED = 0x0001; /** Raw bit controlling how the left/top edge is placed. */ public static final int AXIS_PULL_BEFORE = 0x0002; /** Raw bit controlling how the right/bottom edge is placed. */ public static final int AXIS_PULL_AFTER = 0x0004; /** Bits defining the horizontal axis. */ public static final int AXIS_X_SHIFT = 0; /** Bits defining the vertical axis. */ public static final int AXIS_Y_SHIFT = 4; /** Push object to the top of its container, not changing its size. */ public static final int TOP = (AXIS_PULL_BEFORE|AXIS_SPECIFIED)<>AXIS_X_SHIFT, w, container.left, container.right, xAdj); outRect.right = outRect.left + w; } if ((gravity&((AXIS_PULL_BEFORE|AXIS_PULL_AFTER)<>AXIS_Y_SHIFT, h, container.top, container.bottom, yAdj); outRect.bottom = outRect.top + h; } } /** *

Indicate whether the supplied gravity has a vertical pull.

* * @param gravity the gravity to check for vertical pull * @return true if the supplied gravity has a vertical pull */ public static boolean isVertical(int gravity) { return gravity > 0 && (gravity & VERTICAL_GRAVITY_MASK) != 0; } /** *

Indicate whether the supplied gravity has an horizontal pull.

* * @param gravity the gravity to check for horizontal pull * @return true if the supplied gravity has an horizontal pull */ public static boolean isHorizontal(int gravity) { return gravity > 0 && (gravity & HORIZONTAL_GRAVITY_MASK) != 0; } private static int applyMovement(int mode, int size, int start, int end, int adj) { if ((mode & AXIS_PULL_BEFORE) != 0) { return start + adj; } if ((mode & AXIS_PULL_AFTER) != 0) { return end - size - adj; } return start + ((end - start - size)/2) + adj; } }