小视频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源码,动态毛玻璃背景的简单实现的相关代码,更多内容欢迎关注之后的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现