Activity界面变暗、变亮的核心方法

xiaoxiao2021-02-28  4

     在安卓开发中,通常我们可以看到一个视图弹出时,当前Activity界面会变暗,在触摸视图以外的区域时,Activity界面还原亮度的效果,其实这是通过改变当前Window(窗口)的属性来实现的,下面是结合popWindow实现的效果图以及Window的部分源码:

屏幕变暗 变亮效果图:

Window设置屏幕明暗属性的部分源码:

// The current window attributes. private final WindowManager.LayoutParams mWindowAttributes = new WindowManager.LayoutParams(); /** * Specify custom window attributes. <strong>PLEASE NOTE:</strong> the * layout params you give here should generally be from values previously * retrieved with {@link #getAttributes()}; you probably do not want to * blindly create and apply your own, since this will blow away any values * set by the framework that you are not interested in. * * @param a The new window attributes, which will completely override any * current values. */ public void setAttributes(WindowManager.LayoutParams a) { mWindowAttributes.copyFrom(a); dispatchWindowAttributesChanged(mWindowAttributes); } /** * Retrieve the current window attributes associated with this panel. * * @return WindowManager.LayoutParams Either the existing window * attributes object, or a freshly created one if there is none. */ public final WindowManager.LayoutParams getAttributes() { return mWindowAttributes; } /** * {@hide} */ protected void dispatchWindowAttributesChanged(WindowManager.LayoutParams attrs) { if (mCallback != null) { mCallback.onWindowAttributesChanged(attrs); } } /** * Set the amount of dim behind the window when using * {@link WindowManager.LayoutParams#FLAG_DIM_BEHIND}. This overrides * the default dim amount of that is selected by the Window based on * its theme. * * @param amount The new dim amount, from 0 for no dim to 1 for full dim. */ public void setDimAmount(float amount) { final WindowManager.LayoutParams attrs = getAttributes(); attrs.dimAmount = amount; mHaveDimAmount = true; dispatchWindowAttributesChanged(attrs); }

设置屏幕明暗核心方法:

/** * 定义WindowManager.LayoutParams lp  * (1f-——0f)亮到暗的透明度变化 这里设置为0.7f(较暗的透明度) * 最后通过setAttributes(lp)方法,唤醒窗口明暗度变化 * */ private WindowManager.LayoutParams lp = null; lp.alpha = 0.7f; getWindow().setAttributes(lp);

转载请注明原文地址: https://www.6miu.com/read-1250155.html

最新回复(0)