小视频app源码,动态毛玻璃背景的简单实现

小视频app源码,动态毛玻璃背景的简单实现的相关代码

XML处调用

 

1
    <com.lpoint.widget.BlurBGImageView<br>        android:id="@+id/img_vague"<br>        android:layout_width="300dp"<br>        android:layout_centerInParent="true"<br>        android:layout_height="200dp"/>

完整的BlurBGImageView类

 

1
import android.annotation.SuppressLint;<br>import android.content.Context;<br>import android.graphics.Bitmap;<br>import android.renderscript.Allocation;<br>import android.renderscript.Element;<br>import android.renderscript.RenderScript;<br>import android.renderscript.ScriptIntrinsicBlur;<br>import android.util.AttributeSet;<br>import android.view.View;<br>import android.widget.ImageView;<br>import androidx.annotation.Nullable;<br>@SuppressLint("AppCompatCustomView")<br>public class BlurBGImageView extends ImageView {<br>    Bitmap overlay;<br>    int scaleFactor = 2;<br>    int radius = 8;<br>    public BlurBGImageView(Context context) {<br>        super(context);<br>    }<br>    public BlurBGImageView(Context context, @Nullable AttributeSet attrs) {<br>        super(context, attrs);<br>    }<br>    public BlurBGImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {<br>        super(context, attrs, defStyleAttr);<br>    }<br>    public void setScaleFactor(int scaleFactor) {<br>        this.scaleFactor = scaleFactor;<br>    }<br>    public void refreshBG(View bgView){<br>        bgView.setDrawingCacheEnabled(true);<br>        bgView.buildDrawingCache();<br>        Bitmap bitmap1 = null;<br>        try {<br>            bitmap1 = getBitmap(bgView);<br>        } catch (Exception e) {<br>            e.printStackTrace();<br>        }<br>        if (bitmap1 != null){<br>            blur(bitmap1,this,radius);//模糊处理<br>            bitmap1.recycle();<br>        }<br>        bgView.setDrawingCacheEnabled(false);//清除缓存<br>    }<br>    private void blur(Bitmap bkg, ImageView view, float radius) {<br>        if (overlay != null){<br>            overlay.recycle();<br>        }<br>        overlay = Bitmap.createScaledBitmap(bkg, bkg.getWidth() / scaleFactor, bkg.getHeight() / scaleFactor, false);<br>        overlay = blur(getContext(),overlay, radius);//高斯模糊<br>        view.setImageBitmap(overlay);<br>    }<br>    private Bitmap blur(Context context, Bitmap image, float radius) {<br>        RenderScript rs = RenderScript.create(context);<br>        Bitmap outputBitmap = Bitmap.createBitmap(image.getWidth(), image.getHeight(), Bitmap.Config.ARGB_8888);<br>        Allocation in = Allocation.createFromBitmap(rs, image);<br>        Allocation out = Allocation.createFromBitmap(rs, outputBitmap);<br>        ScriptIntrinsicBlur intrinsicBlur = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));<br>        intrinsicBlur.setRadius(radius);<br>        intrinsicBlur.setInput(in);<br>        intrinsicBlur.forEach(out);<br>        out.copyTo(outputBitmap);<br>        image.recycle();<br>        rs.destroy();<br>        return outputBitmap;<br>    }<br>    private Bitmap getBitmap(View view){<br>        //获取屏幕整张图片<br>        Bitmap bitmap = view.getDrawingCache();<br>        if (bitmap != null) {<br>            //需要截取的长和宽<br>            int outWidth = this.getWidth();<br>            int outHeight = this.getHeight();<br>            //获取需要截图部分的在屏幕上的坐标(view的左上角坐标)<br>            int[] viewLocationArray = new int[2];<br>            this.getLocationOnScreen(viewLocationArray);<br>            int[] listLocationArray = new int[2];<br>            view.getLocationOnScreen(listLocationArray);<br>            //从屏幕整张图片中截取指定区域<br>            bitmap = Bitmap.createBitmap(bitmap, viewLocationArray[0] - listLocationArray[0], viewLocationArray[1]  - listLocationArray[1], outWidth, outHeight);<br>        }<br>        return bitmap;<br>    }<br>}

以上就是 小视频app源码,动态毛玻璃背景的简单实现的相关代码,更多内容欢迎关注之后的文章

 

posted @   云豹科技-苏凌霄  阅读(198)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示