Intereting Posts
Мало утечек памяти в Facebook SDK Линейная компоновка и вес в Android Отключение функции удаления хром с помощью андроида Циркулярная развертка не работает, когда гравитация FAB снизу ИмяValuePair устарело для openConnection Понимание сообщений Android GC Использование Enums в качестве пользовательских атрибутов XML Java.lang.NoClassDefFoundError: android.support.v7.appcompat.R $ стиль Genymotion Google Nexus 6P 7.0.0 с Open_Gapps arm 7.0.0 Изменение цвета текста одного слова в TextView TextView.setTextSize ведет себя ненормально – Как установить размер текста текстового вида динамически для разных экранов Как выбрать конкретную плиту при нажатии и раздувать растровое изображение на ней в андроиде tileview Как проверить неограниченный доступ в Интернет? (Обнаружение портативного портала) Могу ли я запретить телефону спать на веб-странице? Android. Как разместить позиции в смещении относительно центра / верхнего / нижнего (и т. Д.) Их родителя?

Создание размытого прозрачного фонового эффекта

Я пытаюсь сделать представление, которое будет иметь фон, который не только прозрачен, но также будет иметь эффект размытия. Таким образом, взгляды снизу выглядят не в фокусе. Я хочу, чтобы он выглядел так, как будто экран удерживает кнопку питания. Есть идеи?

Solutions Collecting From Web of "Создание размытого прозрачного фонового эффекта"

Теперь, когда флаг окна устарел, вы должны размыть себя. Я ответил на это в другом месте, но вот как вы можете размыть взгляд:

Теперь вы можете использовать ScriptIntrinsicBlur из библиотеки RenderScript для быстрого размытия. Вот как получить доступ к API RenderScript. Следующий класс, который я сделал для размытия видов и растровых изображений:

import android.support.v8.renderscript.*; public class BlurBuilder { private static final float BITMAP_SCALE = 0.4f; private static final float BLUR_RADIUS = 7.5f; public static Bitmap blur(View v) { return blur(v.getContext(), getScreenshot(v)); } public static Bitmap blur(Context ctx, Bitmap image) { int width = Math.round(image.getWidth() * BITMAP_SCALE); int height = Math.round(image.getHeight() * BITMAP_SCALE); Bitmap inputBitmap = Bitmap.createScaledBitmap(image, width, height, false); Bitmap outputBitmap = Bitmap.createBitmap(inputBitmap); RenderScript rs = RenderScript.create(ctx); ScriptIntrinsicBlur theIntrinsic = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); Allocation tmpIn = Allocation.createFromBitmap(rs, inputBitmap); Allocation tmpOut = Allocation.createFromBitmap(rs, outputBitmap); theIntrinsic.setRadius(BLUR_RADIUS); theIntrinsic.setInput(tmpIn); theIntrinsic.forEach(tmpOut); tmpOut.copyTo(outputBitmap); return outputBitmap; } private static Bitmap getScreenshot(View v) { Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888); Canvas c = new Canvas(b); v.draw(c); return b; } } 

Чтобы применить это к фрагменту, добавьте следующее в onCreateView :

 final Activity activity = getActivity(); final View content = activity.findViewById(android.R.id.content).getRootView(); if (content.getWidth() > 0) { Bitmap image = BlurBuilder.blur(content); window.setBackgroundDrawable(new BitmapDrawable(activity.getResources(), image)); } else { content.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Bitmap image = BlurBuilder.blur(content); window.setBackgroundDrawable(new BitmapDrawable(activity.getResources(), image)); } }); } 

ПРИМЕЧАНИЕ. Это решение требует, чтобы min sdk был API 17

EDIT: Renderscript включен в поддержку v8, позволяя этому ответу перейти на api 8. Чтобы включить его с помощью gradle, включите эти строки в ваш файл gradle (из этого ответа ) и используйте Renderscript из пакета android.support.v8.rderscript :

 android { ... defaultConfig { ... renderscriptTargetApi *your target api* renderscriptSupportModeEnabled true } ... } 

Если все, что вы хотите сделать, это размыть фон окна за вашей активностью, то вы можете использовать этот вызов из своей деятельности (или любого класса, например, AlertDialog, который имеет окно)

 getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND); 

Обновление: этот флаг устарел в Android 4.0 и больше не работает .