Android WindowManager.LayoutParams alpha问题
在我的应用程序中,我提供了一项服务,在该服务中,我创建了一个使用WindowManger显示的视图:Android WindowManager.LayoutParams alpha问题,android,opacity,android-view,alpha,android-windowmanager,Android,Opacity,Android View,Alpha,Android Windowmanager,在我的应用程序中,我提供了一项服务,在该服务中,我创建了一个使用WindowManger显示的视图: mFilter = new View(this); mFilter.setBackgroundColor(getResources().getColor(android.R.color.black)); mParams = new WindowManager.LayoutParams( LayoutParams.TYPE_SYSTEM_OVERLAY,
mFilter = new View(this);
mFilter.setBackgroundColor(getResources().getColor(android.R.color.black));
mParams = new WindowManager.LayoutParams(
LayoutParams.TYPE_SYSTEM_OVERLAY,
LayoutParams.FLAG_LAYOUT_IN_SCREEN,
PixelFormat.TRANSPARENT); // PixelFormat.TRANSLUCENT works as well
mWindowManager.addView(mFilter, mParams);
我希望能够通过以下方式动态控制其不透明度:
mParams.alpha = alpha; // alpha is a float chosen by the user and varying from 0 to 1
mWindowManager.updateView(mFilter, mParams);
问题是,它在android 4.2.2下的galaxy s3、android 2.3.6下的galaxy ace、android 2.3.3下的模拟器上运行良好,但在android 2.3.3下的galaxy y上运行失败:alpha不能设置为1到0之间的值,因此它要么是完全透明的(0),要么是完全不透明的(1)。
我的问题是:有人有同样的问题吗?这种情况只会发生在这款手机上吗?有没有办法解决这个问题,或者其他方法来改变不透明度?
我已经在网上搜索了很长时间,但似乎没有人经历过同样的事情。。。
我找到了一个解决方法,通过直接设置视图的不透明度,“一半”可以工作:
mFilter.getBackground().setAlpha(alpha); // alpha is an int varying from 0 to 255
这次的问题是,在旧版本的android上,它可以工作,但在api 10及更低版本上,即使我调用,
mFilter.postInvalidate()
或mWindowManager.updateView(mFilter,mParams)
,视图的不透明度也不会更新。我必须删除它(mWindowManager.removeView(mFilter)
),然后再添加一次,但它会导致屏幕闪烁,因此它是不可接受的…这是一种黑客行为,但由于各种Android版本中的alpha变化,我经常使用AlphaAnimation
来设置视图的不透明度,因为即使在较旧的平台上,这也是一种可靠的方法
试一试:
float alpha = 0.5f;
AlphaAnimation alphaAnimation = new AlphaAnimation(alpha, alpha);
alphaAnimation.setStartTime(0);
alphaAnimation.setDuration(0);
alphaAnimation.setFillAfter(true);
view.setAnimation(alphaAnimation);
view.postInvalidate();`
您的答案在经过一些更正后仍然有效,但在将视图添加到
FrameLayout
中,然后使用view.getBackground().setAlpha(alpha)
设置其不透明度,然后使视图无效后,我终于实现了我想要的结果。它不能完全回答我的问题,因为我想使用WindowManger.LayoutParams.alpha。。。无论如何,谢谢。当用户禁用设备动画时,这不起作用。你能分享你的解决方案吗?