android button背景光晕动画
时间: 2023-07-21 17:51:15 浏览: 49
如果您想要实现一个在Button背景上显示光晕的动画效果,可以使用ValueAnimator和BlurMaskFilter来实现。具体步骤如下:
1. 在布局文件中,将Button的background设置为一个带圆角的背景,例如:
```xml
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
android:background="@drawable/button_bg"/>
```
2. 在drawable文件夹下创建一个新的xml文件,例如button_bg.xml,用来定义Button的背景:
```xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#343434" />
<corners android:radius="50dp" />
</shape>
```
这里的背景颜色为#343434,您可以根据需要修改。
3. 在Activity中,为Button设置点击事件,并在点击事件中实现光晕效果:
```java
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 创建一个ValueAnimator,用来控制光晕的大小
ValueAnimator animator = ValueAnimator.ofInt(0, 50);
animator.setDuration(500);
animator.setInterpolator(new AccelerateDecelerateInterpolator());
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
// 获取光晕的大小值
int value = (int) animation.getAnimatedValue();
// 创建一个BlurMaskFilter,用来实现高斯模糊效果
BlurMaskFilter filter = new BlurMaskFilter(value, BlurMaskFilter.Blur.NORMAL);
// 创建一个Paint,设置光晕效果
Paint paint = new Paint();
paint.setMaskFilter(filter);
paint.setColor(Color.WHITE);
// 将光晕效果应用到背景上
Drawable drawable = button.getBackground();
if (drawable instanceof ShapeDrawable) {
((ShapeDrawable) drawable).getPaint().set(paint);
} else if (drawable instanceof GradientDrawable) {
((GradientDrawable) drawable).getPaint().set(paint);
} else if (drawable instanceof ColorDrawable) {
// do nothing
}
}
});
animator.start();
}
});
```
这里通过创建一个ValueAnimator,来修改光晕的大小值。同时,创建一个BlurMaskFilter,用来实现高斯模糊效果。然后将光晕效果应用到Button的背景上。
运行效果如下:
![button_background_animation](https://img-blog.csdn.net/20180823150343184?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3BhcnRpY2lwYW50X2Jsb2c=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/80)