我想创建一个屏幕效果,就像你在手机中截取屏幕截图一样,我的意思是,当我点击一个按钮时屏幕上有一点闪光,我也想改变那个闪光灯的颜色。那可能吗?非常感谢你提前;)
答案 0 :(得分:11)
获得此效果的简单方法是:
在布局上创建一个空的“面板”。例如:
<?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);
我之前没有使用过这种代码,因此您可能需要相应地调整持续时间。
答案 1 :(得分:0)
这是Kotlin的版本,因为您需要自己实现Animation侦听器。
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?) {
}
}
答案 2 :(得分:-1)
添加View.VISIBLE而不是View.GONE onAnimationEnd。
fade.setAnimationListener(new AnimationListener() {
...
@Override
public void onAnimationEnd(Animation anim) {
pnlFlash.setVisibility(View.VISIBLE);
}
...
});
pnlFlash.startAnimation(fade);
答案 3 :(得分:-1)
@Rahul RV,抱歉,我还没有足够的声誉发表评论,
但正确的是@Scott说
pnlFlash.setVisibility(View.GONE);
使用#ffffff for android:background(在我的情况下)
如果你使用像代码一样可见,那么白色面板仍然会在那里阻挡整个屏幕