Как размыть фоновые изображения в Android
Каков наилучший способ размытия фоновых изображений, таких как изображение ниже? Я видел несколько кодов и библиотек, но их несколько лет или как библиотека BlurBehind, но это не дает такого же эффекта. Спасибо заранее!
![введите описание изображения здесь]()
Ответы
Ответ 1
Самый простой способ сделать это - использовать библиотеку. Взгляните на это: https://github.com/wasabeef/Blurry
В библиотеке вам нужно только сделать это:
Blurry.with(context)
.radius(10)
.sampling(8)
.color(Color.argb(66, 255, 255, 0))
.async()
.onto(rootView);
Ответ 2
Это простой способ размытия изображений с помощью Android RenderScript, который я нашел в этой статье .
-
Создайте класс под названием BlurBuilder
public class BlurBuilder {
private static final float BITMAP_SCALE = 0.4f;
private static final float BLUR_RADIUS = 7.5f;
public static Bitmap blur(Context context, 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(context);
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;
}
}
-
Скопируйте любое изображение в свою папку с рисунком
-
Используйте BlurBuilder в своей деятельности следующим образом:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_login);
mContainerView = (LinearLayout) findViewById(R.id.container);
Bitmap originalBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.background);
Bitmap blurredBitmap = BlurBuilder.blur( this, originalBitmap );
mContainerView.setBackground(new BitmapDrawable(getResources(), blurredBitmap));
-
Renderscript включен в поддержку v8, позволяя этому ответу перейти на api 8. Чтобы включить его с помощью gradle, включите эти строки в ваш файл gradle (из этого ответа)
defaultConfig {
...
renderscriptTargetApi *your target api*
renderscriptSupportModeEnabled true
}
-
Результат
![введите описание изображения здесь]()
Ответ 3
У вас может быть вид с цветом фона, как черный, и установите альфа для представления как 0,7 или что-либо в соответствии с вашим требованием.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/onboardingimg1">
<View
android:id="@+id/opacityFilter"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"
android:layout_alignParentBottom="true"
android:alpha="0.7">
</View>
</RelativeLayout>
Ответ 4
overlay
- это дополнительный слой, который находится поверх представления ( "представление хоста" ), которое выводится после всего остального содержимого в этом представлении (включая дочерние элементы, если представление ViewGroup). Взаимодействие с слоем наложения выполняется путем добавления и удаления чертежей.
Попробуйте это, Наложение с помощью пользовательских инструкций
Ответ 5
Это может быть очень поздний ответ, но я надеюсь, что это поможет кому-то.
- Вы можете использовать сторонние библиотеки, такие как RenderScript/Blurry/etc.
- Если вы не хотите использовать какие-либо сторонние библиотеки, вы можете сделать это, используя альфа (установка alpha в 0 означает полное размытие, а 1 означает то же, что и существующее).
Примечание. (Если вы используете точку 2). При настройке альфы на фон она размывает весь макет. Чтобы избежать этого, создайте новый xml, содержащий drawable и установите alpha здесь на 0.5 (или значение вашего желания) и используйте это имя для рисования (имя файла) в качестве фона.
Например, используйте его, как показано ниже (например, имя файла bgndblur.xml):
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:shape="rectangle"
android:src="@drawable/registerscreenbackground"
android:alpha="0.5">
Используйте следующее в своем макете:
<....
android:background="@drawable/bgndblur">
Надеюсь, что это помогло.
Ответ 6
это может быть не самое эффективное решение, но я должен был использовать его, так как библиотека wasabeef/Blurry не работала для меня. это может быть удобно, если вы намерены иметь некоторую размытую анимацию:
1- вам нужно иметь 2 варианта изображения, обычный и размытый, сделайте с фотошопом или любым другим
2- установите изображения, соответствующие друг другу в вашем xml, затем один из них можно увидеть и что верхний
3- заданная анимация затухания на верхней:
final Animation fadeOut = new AlphaAnimation(1, 0);
fadeOut.setInterpolator(new AccelerateInterpolator());
fadeOut.setDuration(1000);
fadeOut.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {}
@Override
public void onAnimationEnd(Animation animation) {upperone.setVisibility(View.GONE);}
@Override
public void onAnimationRepeat(Animation animation) {}
});
upperone.startAnimation(fadeOut);
Ответ 7
Простейший способ достижения этого приведен ниже,
I)
Glide.with(context.getApplicationContext())
.load(Your Path)
.override(15, 15) // (change according to your wish)
.error(R.drawable.placeholder)
.into(image.score);
else вы можете следовать приведенному ниже коде.
II),
1.Создайте класс. (Код указан ниже)
public class BlurTransformation extends BitmapTransformation {
private RenderScript rs;
public BlurTransformation(Context context) {
super( context );
rs = RenderScript.create( context );
}
@Override
protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
Bitmap blurredBitmap = toTransform.copy( Bitmap.Config.ARGB_8888, true );
// Allocate memory for Renderscript to work with
Allocation input = Allocation.createFromBitmap(
rs,
blurredBitmap,
Allocation.MipmapControl.MIPMAP_FULL,
Allocation.USAGE_SHARED
);
Allocation output = Allocation.createTyped(rs, input.getType());
// Load up an instance of the specific script that we want to use.
ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
script.setInput(input);
// Set the blur radius
script.setRadius(10);
// Start the ScriptIntrinisicBlur
script.forEach(output);
// Copy the output to the blurred bitmap
output.copyTo(blurredBitmap);
toTransform.recycle();
return blurredBitmap;
}
@Override
public String getId() {
return "blur";
}
}
2. Установите изображение в ImageView с помощью Glide.
например:
Glide.with(this)
.load(expertViewDetailsModel.expert.image)
.asBitmap()
.transform(new BlurTransformation(this))
.into(ivBackground);
Ответ 8
Вы можете использовать
Glide.with(getContext()).load(R.mipmap.bg)
.apply(bitmapTransform(new BlurTransformation(22)))
.into((ImageView) view.findViewById(R.id.imBg));
Ответ 9
Попробуйте ввести код.
Вставьте этот код в "Создать".
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy =
new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
Url="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTIur0ueOsmVmFVmAA-SxcCT7bTodZb3eCNbiShIiP9qWCWk3mDfw";
// Picasso.with(getContext()).load(Url).into(img_profile);
// Picasso.with(getContext()).load(Url).into(img_c_profile);
bitmap=getBitmapFromURL(Url);
Bitmap blurred = blurRenderScript(bitmap, 12);//second parametre is radius
img_profile.setImageBitmap(blurred);