как сделать полукруглый прямоугольник в приложении BlackBerry - PullRequest
2 голосов
/ 13 июля 2011

enter image description here

Ниже адреса электронной почты пользователь введет адрес электронной почты n под паролем, пользователь введет пароль, он может сделать квадрат, но верхний квадрат должен быть изогнутым в верхней части, а нижний квадрат - в нижней.

Ответы [ 2 ]

3 голосов
/ 14 июля 2011

То, что я сделал, я думаю, будет делать то, что вы хотите.Вам просто нужно добавить их в этот менеджер.Обратите внимание, что я не думаю, что он компенсирует такие вещи, как margin или padding, так что вы можете либо вычислить это с помощью метода paint(), либо просто заключить его в другой Менеджер, который имеет надлежащие padding / margin:

public class GroupFieldManager extends VerticalFieldManager {
    private int _rounding;
    private int _bgColor;
    private int _borderColor;

    private boolean _divider;
    private int _dividerColor;

    public GroupFieldManager(boolean divider, long style) {
        super(style);
        _rounding = 20;
        _bgColor = 0xFFFFFF;
        _borderColor = 0xAAAAAA;
        _divider = divider;
        _dividerColor = 0xAAAAAA;
    }

    public GroupFieldManager(boolean divider) {
        this(divider, 0);
    }

    public GroupFieldManager() {
        this(false, 0);
    }

    /**
     * Sets whether or not to draw a divider
     * @param on
     */
    public void setDivider(boolean on) {
        _divider = on;
    }

    /**
     * Sets the color for the divider (also turns divider on)
     * @param color
     */
    public void setDividerColor(int color){
        _dividerColor = color;
        _divider = true;
    }

    /**
     * Sets the background color for the grouping
     * @param color
     */
    public void setBackgroundColor(int color) {
        _bgColor = color;
    }

    /**
     * Sets the border color for the grouping
     * @param color
     */
    public void setBorderColor(int color) {
        _borderColor = color;
    }

    /**
     * Sets the amount of rounding for the border
     * @param rounding
     */
    public void setRounding(int rounding) {
        _rounding = rounding;
    }

    protected void paint(Graphics graphics) {
        int oldColor = graphics.getColor();

        //draw the background
        graphics.setColor(_bgColor);
        graphics.fillRoundRect(0, 0, getWidth(), getHeight(), _rounding, _rounding);

        //draw the border
        graphics.setColor(_borderColor);
        graphics.drawRoundRect(0, 0, getWidth(), getHeight(), _rounding, _rounding);

        //draw dividers
        if(_divider) {
            graphics.setColor(_dividerColor);
            int y = 0;

            //go through each field, figure it's height, and draw a line under it
            for(int i=0;i<getFieldCount();i++) {
                if(i != getFieldCount() - 1) {
                    int height = getField(i).getHeight();
                    y += height;

                    graphics.drawLine(0, y, getWidth(), y);
                }
            }
        }

        graphics.setColor(oldColor);
        super.paint(graphics);
    }
}
1 голос
/ 13 июля 2011

Поскольку существуют только методы, доступные для рисования четырех круглых углов, вы можете использовать ограничивающий прямоугольник, чтобы обрезать рисунок по прямой линии, т.е. вы на самом деле рисуете больший закругленный прямоугольник, но обрезаете нижнюю (или верхнюю) его часть.

...