В моем приложении есть служба, в которой я создаю представление, которое отображаю с помощью 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);
Проблема в том, что он отлично работает на моем galaxy s3 под android 4.2.2, на моем galaxy ace под android 2.3.6, на эмуляторе под android 2.3.3 НО не работает на моем galaxy y под android 2.3. 3: для альфа-канала нельзя установить значение от 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)
), а затем снова добавить, но экран мигает, поэтому это неприемлемо...