使用点击外部发光动画创建android按钮

时间:2016-11-14 02:19:18

标签: android xml button view android-custom-view

我搜索了所有的互联网,但没有找到答案如何实现我想要的。

我想创建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. 难以回答。如何在显示和消失动画的情况下执行此按钮?用户触摸按钮 - 发光从0%不透明度到100%不透明度在300ms内出现。当用户停止触摸按钮时,发光应以类似的方式消失。

  3. 提前非常感谢你!

1 个答案:

答案 0 :(得分:1)

  

您可以在点击时设置Alpha动画   按钮。你必须把发光作为背景按钮和你   按下按钮按钮的背景将像阿尔法一样动画   重复计数1的动画,所以它看起来像阴影出现和   dissappear。设置动画时间300毫秒

     动画文件夹中的

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);


            }
        });
    }
}