Android如何在Java中创建涟漪效应

时间:2015-03-02 18:46:36

标签: java android xml android-5.0-lollipop ripple

我有涟漪xml。但我不确定如何在Java中获得相同的效果。

<ripple
xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/blue_1"
/>

我想定义/创建/加载涟漪,甚至用Java设置颜色。 这意味着,在java中,我可以加载XML纹波,然后分配颜色。或者我可以用java做一切:Ripple = new Ripple?

我尝试了此链接中的代码:https://github.com/romainguy/google-io-2014/blob/master/app/src/main/java/com/example/android/io2014/DetailActivity.java

有一种名为colorRipple的方法。

private void colorRipple(int id, int bgColor, int tintColor) {
    View buttonView = findViewById(id);

    RippleDrawable ripple = (RippleDrawable) buttonView.getBackground();
    GradientDrawable rippleBackground = (GradientDrawable) ripple.getDrawable(0);
    rippleBackground.setColor(bgColor);

    ripple.setColor(ColorStateList.valueOf(tintColor));
}

我尝试了上面的代码,但它给了我NPE。

2 个答案:

答案 0 :(得分:2)

您可以在运行时使用以下内容创建或修改RippleDrawable

ColorStateList csl = ColorStateList.valueOf(Color.BLUE);
RippleDrawable d = new RippleDrawable(csl, null, null);

// Change the color, if desired.
ColorStateList otherCsl = ColorStateList.valueOf(Color.RED);
d.setColor(otherCsl);

答案 1 :(得分:0)

你不能在api 21下面的android中使用默认的rippleview 您需要在触摸时制作带动画的自定义视图。或者你可以轻松使用这个来为视图添加涟漪: https://github.com/balysv/material-ripple

从java添加涟漪:

MaterialRippleLayout.on(view)
           .rippleColor(Color.BLACK)
           .create();