Подтвердить что ты не робот

Как размыть фоновые изображения в Android

Каков наилучший способ размытия фоновых изображений, таких как изображение ниже? Я видел несколько кодов и библиотек, но их несколько лет или как библиотека BlurBehind, но это не дает такого же эффекта. Спасибо заранее!

введите описание изображения здесь

4b9b3361

Ответ 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);