Создать список слоев с закругленными углами программно

В настоящее время я пытаюсь преобразовать следующий XML, который будет создан программным способом, чтобы я мог устанавливать верхние и нижние углы по мере необходимости во всем проекте. Это простой список слоев, который имеет два прямоугольника; один поверх другого. Я хотел бы использовать это в качестве фона для нескольких различных представлений, поэтому важно, чтобы результат масштабировался.


    
        
            
            
            
        
    
    
        
            
            
            
        
    

Этот подход работает, но мне нужен отдельный XML для каждой фигуры в зависимости от того, хочу ли я скруглить верх, низ, оба или ни один из углов.

Мои текущие попытки создать один и тот же объект рисования не дали ничего, кроме двух прямоугольников, один над другим. Я не мог понять, как установить положение прямоугольников. Я не мог видеть видимых изменений независимо от того, какие границы формы были установлены. Любые предложения будут ценны.

// Usage: 
setBackgroundDrawable(new DualColorStateDrawable(0, 10f));

...

private final int topColorUnselected = Color.RED;
private final int bottomColorUnselected = Color.GREEN;
private final int topColorSelected = Color.YELLOW;
private final int bottomColorSelected = Color.BLUE;
private final int m_nZERO_RADIUS = 0;

class DualColorStateDrawable extends StateListDrawable
{
    public NYWTableViewCellStateDrawable(float topRadius, float bottomRadius){
        addState(new int[] { -android.R.attr.state_pressed }, 
                 createListWithSelectedState(false, topRadius, bottomRadius));
        addState(new int[] { android.R.attr.state_pressed }, 
                 createListWithSelectedState(true, topRadius, bottomRadius));   
    }

    public Drawable createListWithSelectedState(
        boolean isSelected, float topRadius, float bottomRadius){

        int topColor, bottomColor;

        if (isSelected) {
            topColor = topColorSelected;
            bottomColor = bottomColorSelected;
        } else {
            topColor = topColorUnselected;
            bottomColor = bottomColorUnselected;
        }

        int x = 10;
        int y = 10;
        int width = 20;
        int height = 20;

        RoundRectShape _rrsTopShape = 
            new RoundRectShape(getRadii(topRadius, m_nZERO_RADIUS), null, null);
        CustomShapeDrawable _csdTopShape = 
            new CustomShapeDrawable(_rrsTopShape, topColor);
        RoundRectShape _rrsBottomShape = 
            new RoundRectShape(getRadii(m_nZERO_RADIUS, bottomRadius), null, null);
        CustomShapeDrawable _csdBottomShape = 
            new CustomShapeDrawable(_rrsBottomShape, bottomColor);
        _csdBottomShape.setBounds(x, y, x + width, y + height);

        return new LayerDrawable(new Drawable[] {_csdTopShape, _csdBottomShape});
    }

    private float[] getRadii(float top, float bottom) 
    {
        return new float[] { top, top, //
                top, top, //
                bottom, bottom, //
                bottom, bottom //
        };
    }

    class CustomShapeDrawable extends ShapeDrawable {
        private final Paint fillpaint;

        public CustomShapeDrawable(Shape s, int fill) {
            super(s);
            fillpaint = new Paint(this.getPaint());
            fillpaint.setColor(fill);
        }

        @Override
        protected void onDraw(Shape shape, Canvas canvas, Paint paint) {
            shape.draw(canvas, fillpaint);
        }
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос