Как установить альфа-значение всего представления на уровне api 7 (Android 2.1)

У меня есть произвольная точка зрения, что я хочу исчезнуть поверх другого представления. В 11-ом уровне 11 я вижу, что есть setAlpha, но я застрял в поддержке уровня api 7. Я не сталкивался с простым способом сделать это. Как я могу настроить альфа для всего представления, не вникая в каждый отдельный компонент?

Вы должны иметь возможность добиться разумного эффекта, используя AlphaAnimation на уровне API 7.

View v = findViewById(R.id.view2); AlphaAnimation aa = new AlphaAnimation(0f,1f); aa.setDuration(5000); v.startAnimation(aa); 

Использование AlphaAnimation было бы отличным решением для большинства переходов и, безусловно, сработало бы для меня, если бы я не смог найти способ сделать именно то, что я пытался сделать, что предполагает постепенное исчезновение двух видов в зависимости от наклона Угол устройства. К счастью, у меня есть! Вот стратегия, которую я взял: я завернул представление в пользовательский подкласс FrameLayout и реализовал onDraw. Там я захватил представление child как растровое изображение, а затем перерисовал растровое изображение с предполагаемой альфой. Вот код. Я буду редактировать, когда меня убирают, это просто доказательство концепции, но оно работает как шарм:

 public class AlphaView extends FrameLayout { private int alpha = 255; public AlphaView(Context context) { super(context); setWillNotDraw(false); } public AlphaView(Context context, AttributeSet attrs) { super(context, attrs); setWillNotDraw(false); } public AlphaView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setWillNotDraw(false); } public void setCustomAlpha(int alpha) { if (this.alpha != alpha) { this.alpha = alpha; invalidate(); } } public int getCustomAlpha() { return alpha; } @Override protected void onDraw(Canvas canvas) { for(int index = 0; index < getChildCount(); index++ ) { View child = getChildAt(index); child.setVisibility(View.INVISIBLE); child.setDrawingCacheEnabled(true); Bitmap bitmap = child.getDrawingCache(true); bitmap = Bitmap.createBitmap(bitmap); child.setDrawingCacheEnabled(false); Paint paint = new Paint(); paint.setAlpha(alpha); canvas.drawBitmap(bitmap, 0, 0, paint); } } } 

Это будет зависеть от типа вида.

Для TextView в xml вы можете иметь следующие атрибуты:

 android:background="#00000000" android:textColor="#77FFFFFF" 

Первые два числа – это альфа-значения от 00 до FF (в гексагоне). Фон будет полностью прозрачным, а текст будет белым, частично прозрачным. Я не тестировал это, но он должен работать.

Если у вас есть фон, являющийся изображением, то самое легкое, что нужно сделать, – предварительно создать свой png с прозрачностью.

Intereting Posts
Как надуть Android NavigationView с другим меню динамически во время onClick? Удалить поле в значке панели инструментов Android Намерение действовать в Side-Menu. Андроид материального дизайна Как переносить платные Android-приложения из одной учетной записи google в другую учетную запись google Android Studio: Переключение URL-адреса в зависимости от типа сборки? (Используется для тестирования в отладке / выпуске) Подключение двух устройств с помощью libgdx Как настроить панель выполнения на Android Как установить текст в EditText Ссылка на строку в ресурсе массива строк с помощью xml Вызвать метод фрагмента из адаптера Использование намерений для передачи данных между действиями в android Как установить рынок Android на эмулятор для всех api's Видео YouTube не воспроизводится в WebView Глубокая привязка к Android не запускает приложение и не перенаправляется на рынок Android-игр Есть ли способ сократить время загрузки Android-эмулятора с поддержкой Android SDK