创建带水龙头外部辉光动画的android按钮

问题描述:

我通过所有的互联网搜索到了,但没有找到答案如何实现我想要的。创建带水龙头外部辉光动画的android按钮

我想创建GlowButton(我的意思是它将按钮扩展)类,它是按下或聚焦状态时带有外发光的按钮。 见下面的图片,明白我的意思:

enter image description here

此外发光应该出现,即消失动画(只是改变不透明度)。

  1. 简单的问题。我该如何做这个没有动画的按钮。我知道我可以这样创造的东西:

    <item android:state_pressed="true"> 
        <shape> 
         <solid android:color="@color/gray"/> 
         <stroke 
          android:width="4dp" 
          android:color="@color/orange" /> 
         <corners 
          android:radius="8dp" /> 
         <padding android:bottom="1dp" 
           android:top="1dp" 
           android:left="1dp" 
           android:right="1dp"/> 
        </shape> 
    </item> 
    ... 
    

    但有一个坚实的光芒。我需要如上图所示的渐变发光。

  2. 难题。如何使用出现和消失动画来做这个按钮?用户触摸按钮 - 在300毫秒内从0%不透明度到100%不透明度出现辉光。当用户停止触摸按钮时,发光应该以类似的方式消失。

非常感谢你提前!

您可以点击 按钮设置alpha动画。你必须把辉光当做背景来使用按钮,当你按下按钮时,按钮的背景将会像动画一样重复动画,并重复计数1,这样看起来阴影就会出现,并且 消失。集动画时间为300ms

在动画文件夹alpha_animation.xml

<?xml version="1.0" encoding="UTF-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 

    <alpha 
     android:duration="1000" 
     android:fromAlpha="0.0" 
     android:interpolator="@android:anim/accelerate_interpolator" 
     android:toAlpha="1.0" /> 

</set> 

布局文件就像波纹管

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <Button 
     android:id="@+id/btnGlowBg" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:layout_centerInParent="true" 
     android:background="@drawable/drawable_glow" 
     android:padding="20dp" 
    /> 
    <Button 
     android:id="@+id/btnPinButton" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:layout_centerInParent="true" 
     android:padding="20dp" 
     android:text="10"/> 

</RelativeLayout> 

活动代码

public class TestActivity extends AppCompatActivity { 
    Button btnGlowBg; 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layout_test); 

     btnGlowBg = (Button) findViewById(R.id.btnGlowBg); 
     btnGlowBg.setVisibility(View.GONE); 
     findViewById(R.id.btnPinButton).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) {     
       btnGlowBg.setVisibility(View.VISIBLE); 
       final Animation startAnimation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha_animation); 
       btnGlowBg.startAnimation(startAnimation); 


      } 
     }); 
    } 
}