I want to blur a videoview which is playing a video from raw folder.
Blurring a imageview or a layout containing drawable background is possible using renderscript or libraries like Blurry. But how to blur a video? I tried methods like converting uri path of video to bitmap, video to thumbnail but didn't work.
Here is my code.
package com.example.myapplication
import android.graphics.BitmapFactory
import android.graphics.drawable.BitmapDrawable
import android.net.Uri
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.widget.MediaController
import android.widget.VideoView
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val videoView = findViewById(R.id.videoView) as VideoView
val mediaController = MediaController(this)
mediaController.setAnchorView(videoView)
val uri = Uri.parse("android.resource://" + packageName + "/" + R.raw.samplevideo)
videoView.setMediaController(mediaController)
videoView.setVideoURI(uri)
videoView.requestFocus()
videoView.start()
var runnable = Runnable {
var resultBmp = BlurBuilder.blur(this, BitmapFactory.decodeResource(resources, R.raw.samplevideo))
var drawable = BitmapDrawable(resources, resultBmp)
videoView.background = drawable
}
videoView.post(runnable)
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/relativeLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<VideoView
android:id="@+id/videoView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>
BlurBuilder.kt
package com.example.myapplication;
import android.content.Context;
import android.graphics.Bitmap;
import android.renderscript.Allocation;
import android.renderscript.Element;
import android.renderscript.RenderScript;
import android.renderscript.ScriptIntrinsicBlur;
object BlurBuilder {
private val BITMAP_SCALE = 0.6f
private val BLUR_RADIUS = 15f
fun blur(context: Context, image: Bitmap): Bitmap {
val width = Math.round(image.width * BITMAP_SCALE)
val height = Math.round(image.height * BITMAP_SCALE)
val inputBitmap = Bitmap.createScaledBitmap(image, width, height, false)
val outputBitmap = Bitmap.createBitmap(inputBitmap)
val rs = RenderScript.create(context)
val intrinsicBlur = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs))
val tmpIn = Allocation.createFromBitmap(rs, inputBitmap)
val tmpOut = Allocation.createFromBitmap(rs, outputBitmap)
intrinsicBlur.setRadius(BLUR_RADIUS)
intrinsicBlur.setInput(tmpIn)
intrinsicBlur.forEach(tmpOut)
tmpOut.copyTo(outputBitmap)
return outputBitmap
}
}
Please help me in blurring video view or relative layout containing the video view.