5

我想创建一个屏幕效果,就像你在手机中截屏时一样,我的意思是,当我点击一个按钮时屏幕上有一点闪光,我也想改变那个闪光的颜色。那可能吗?非常感谢你;)

4

3 回答 3

13

获得这种效果的一种简单方法是使用以下方法:

在您的布局上创建一个空的“面板”。例如:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:layout_height="wrap_content"
        android:layout_width="fill_parent">
        <!-- Your normal layout in here, doesn't have to be a LinearLayout -->
    </LinearLayout>
    <FrameLayout
        android:id="@+id/pnlFlash"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="[Set to your desired flash colour, image, etc]"
        android:visibility="gone"
        />
</FrameLayout>

id 为“pnlFlash”的 FrameLayout 保持隐藏状态,因此不会干扰正常交互。

现在,当您想要制作闪光灯时,您所要做的就是让面板显示适当的时间。有一个很好的淡出总是有帮助的。

pnlFlash.setVisibility(View.VISIBLE);

AlphaAnimation fade = new AlphaAnimation(1, 0);
fade.setDuration(50);
fade.setAnimationListener(new AnimationListener() {
    ...
    @Override
    public void onAnimationEnd(Animation anim) {
        pnlFlash.setVisibility(View.GONE);
    }
    ...
});
pnlFlash.startAnimation(fade);

我以前没有使用过这种代码来进行闪存,因此您可能需要相应地调整持续时间。

于 2012-05-07T00:11:31.723 回答
0

这是 Kotlin 的一个版本,因为您需要自己实现动画侦听器。

private fun pictureTakenAnimation() {
    val listener = AnimationListener(pnlFlash)
    pnlFlash.visibility = View.VISIBLE

    val fade = AlphaAnimation(1f, 0f);
    fade.setDuration(500);
    fade.setAnimationListener(listener)
    pnlFlash.startAnimation(fade);
}

inner class AnimationListener(val v : View) : Animation.AnimationListener {
    override fun onAnimationStart(p0: Animation?) {
        v.visibility = View.VISIBLE
    }

    override fun onAnimationEnd(p0: Animation?) {
        v.visibility = View.GONE
    }

    override fun onAnimationRepeat(p0: Animation?) {

    }
}
于 2020-10-06T07:58:16.983 回答
-1

添加 View.VISIBLE 而不是 View.GONE onAnimationEnd。

fade.setAnimationListener(new AnimationListener() {
...
@Override
public void onAnimationEnd(Animation anim) {
    pnlFlash.setVisibility(View.VISIBLE);
}
...
});
pnlFlash.startAnimation(fade); 
于 2014-09-23T20:44:18.623 回答