How to blur background images in Android

前端 未结 10 2085
借酒劲吻你
借酒劲吻你 2020-11-30 22:12

What is the best way to blur background images like the image below? I saw some code and libraries but their are a couple of years old or like BlurBehind library, but it doe

相关标签:
10条回答
  • 2020-11-30 22:44

    The easiest way to do that is use a library. Take a look at this one: https://github.com/wasabeef/Blurry

    With the library you only need to do this:

    Blurry.with(context)
      .radius(10)
      .sampling(8)
      .color(Color.argb(66, 255, 255, 0))
      .async()
      .onto(rootView);
    
    0 讨论(0)
  • 2020-11-30 22:44

    Try below code.. Put This Code in On Create..

     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);

    Create Below Methods.. Just Copy Past..

     public static Bitmap getBitmapFromURL(String src) {
            try {
                URL url = new URL(src);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setDoInput(true);
                connection.connect();
                InputStream input = connection.getInputStream();
                Bitmap myBitmap = BitmapFactory.decodeStream(input);
                return myBitmap;
            } catch (IOException e) {
                // Log exception
                return null;
            }
        }
        @SuppressLint("NewApi")
        private Bitmap blurRenderScript(Bitmap smallBitmap, int radius) {
    
            try {
                smallBitmap = RGB565toARGB888(smallBitmap);
            } catch (Exception e) {
                e.printStackTrace();
            }
    
    
            Bitmap bitmap = Bitmap.createBitmap(
                    smallBitmap.getWidth(), smallBitmap.getHeight(),
                    Bitmap.Config.ARGB_8888);
    
            RenderScript renderScript = RenderScript.create(getActivity());
    
            Allocation blurInput = Allocation.createFromBitmap(renderScript, smallBitmap);
            Allocation blurOutput = Allocation.createFromBitmap(renderScript, bitmap);
    
            ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(renderScript,
                    Element.U8_4(renderScript));
            blur.setInput(blurInput);
            blur.setRadius(radius); // radius must be 0 < r <= 25
            blur.forEach(blurOutput);
    
            blurOutput.copyTo(bitmap);
            renderScript.destroy();
    
            return bitmap;
    
        }
    
        private Bitmap RGB565toARGB888(Bitmap img) throws Exception {
            int numPixels = img.getWidth() * img.getHeight();
            int[] pixels = new int[numPixels];
    
            //Get JPEG pixels.  Each int is the color values for one pixel.
            img.getPixels(pixels, 0, img.getWidth(), 0, 0, img.getWidth(), img.getHeight());
    
            //Create a Bitmap of the appropriate format.
            Bitmap result = Bitmap.createBitmap(img.getWidth(), img.getHeight(), Bitmap.Config.ARGB_8888);
    
            //Set RGB pixels.
            result.setPixels(pixels, 0, result.getWidth(), 0, 0, result.getWidth(), result.getHeight());
            return result;
        }

    0 讨论(0)
  • 2020-11-30 22:47

    You can have a view with Background color as black and set alpha for the view as 0.7 or whatever as per your requirement.

    <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>
    
    0 讨论(0)
  • 2020-11-30 22:53

    this might not be the most efficient solution but I had to use it since the wasabeef/Blurry library didn't work for me. this could be handy if you intend to have some getting-blurry animation:

    1- you need to have 2 versions of the picture, normal one and the blurry one u make with photoshop or whatever

    2- set the images fit on each other in your xml, then one of them could be seen and that's the upper one

    3- set fadeout animation on the upper one:

    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);
    
    0 讨论(0)
  • 2020-11-30 22:56

    The simplest way to achieve this is given below,

    I)

    Glide.with(context.getApplicationContext())
                            .load(Your Path)   
                            .override(15, 15) // (change according to your wish)
                            .error(R.drawable.placeholder)
                            .into(image.score);
    

    else you can follow the code below..

    II)

    1.Create a class.(Code is given below)

    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.Set image to ImageView using Glide.

    eg:

    Glide.with(this)
         .load(expertViewDetailsModel.expert.image)
         .asBitmap()
         .transform(new BlurTransformation(this))
         .into(ivBackground);
    
    0 讨论(0)
  • 2020-11-30 23:00

    You can quickly get to blur effect by doing the following.

    // Add this to build.gradle app //

    Compile ' com.github.jgabrielfreitas:BlurImageView:1.0.1 '
    

    // Add to XML

    <com.jgbrielfreitas.core.BlurImageView
        android:id="@+id/iv_blur_image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
    />
    

    //Add this to java

    Import com.jgabrielfreitas.core.BlueImageView;
    

    // Under public class *activity name * //

    BlurImageView myBlurImage;
    

    // Under Oncreate//

    myBlurImage = (ImageView) findViewById(R.id.iv_blur_image)
    MyBlurImage.setBlue(5)
    

    I hope that helps someone

    0 讨论(0)
提交回复
热议问题