Android WindowManager.LayoutParams alpha问题

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,

在我的应用程序中,我提供了一项服务,在该服务中,我创建了一个使用WindowManger显示的视图:

    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。。。无论如何,谢谢。当用户禁用设备动画时,这不起作用。你能分享你的解决方案吗?