ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-11-24 14:32:25  阅读:176  来源: 互联网

标签:overlay int app Bitmap 小视频 源码 context import android


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

XML处调用

 

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

完整的BlurBGImageView类

 

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

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

 

标签:overlay,int,app,Bitmap,小视频,源码,context,import,android
来源: https://www.cnblogs.com/yunbaomengnan/p/15597940.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有