Как создать пульсацию с радиусом угла программно? - PullRequest
0 голосов
/ 15 ноября 2018

Есть несколько похожих вопросов. Но они не решены!

Установить программный радиус угла RippleDrawable

Я знаю, что такое поведение можно сделать , используя xml-файл . Но я должен это программно.

Мой код указан ниже:

    GradientDrawable gd = new GradientDrawable();
    gd.setColor(Color.YELLOW);
    gd.setStroke(2, Color.RED);
    gd.setCornerRadius(45.0f);
    view.setBackground(gd);

    int[] colors = new int[]{Color.GRAY};
    int[][] states = new int[][]{ new int[]{}};
    ColorStateList stateList = new ColorStateList(states, colors);

    Drawable mask = getResources().getDrawable(R.drawable.icon1);
    RippleDrawable rippleDrawableBackgorund = new RippleDrawable(stateList, view.getBackground(), mask);

    view.setBackground(rippleDrawableBackgorund);

Снимок экрана ниже для нажатого состояния:

enter image description here

Как я могу установить borderRadius для RippleDrawable? Кроме того, rippleDrawableBackgorund.setRadius изменяет этот эффект для состояния наведения.

enter image description here

1 Ответ

0 голосов
/ 15 ноября 2018

Это руководство сэкономит мои часы :) http://blog.blundellapps.co.uk/tut-programmatically-create-a-rippledrawable-of-any-color/

Использовать параметр маски конструктора RippleDrawable.

private static Drawable getRippleColor(int color) {
    float[] outerRadii = new float[8];
    Arrays.fill(outerRadii, 3);
    RoundRectShape r = new RoundRectShape(outerRadii, null, null);
    ShapeDrawable shapeDrawable = new ShapeDrawable(r);
    shapeDrawable.getPaint().setColor(color);
    return shapeDrawable;
}
...