自定义View(9)使用Renderscript 渲染特效。
1.渲染脚本官网
https://developer.android.com/guide/topics/renderscript/compute
2.高斯模糊 ScriptIntrinsicBlur
2.1 添加api
在module 的 build.gradle 文件中添加选项,注意是 defaultConfig中。
1 android { 2 compileSdkVersion 28 3 defaultConfig { 4 applicationId "com.cnblogs.sjjg.gaussianblur" 5 minSdkVersion 17 6 targetSdkVersion 28 7 versionCode 1 8 versionName "1.0" 9 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 10 renderscriptTargetApi 18 11 renderscriptSupportModeEnabled true 12 } 13 buildTypes { 14 release { 15 minifyEnabled false 16 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 17 } 18 } 19 } 20 21 dependencies { 22 implementation fileTree(dir: 'libs', include: ['*.jar']) 23 implementation 'androidx.appcompat:appcompat:1.0.2' 24 implementation 'androidx.constraintlayout:constraintlayout:1.1.3' 25 testImplementation 'junit:junit:4.12' 26 androidTestImplementation 'androidx.test:runner:1.2.0' 27 androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' 28 }
2.2 添加模糊工具类
1 package com.cnblogs.sjjg.gaussianblur; 2 3 import android.content.Context; 4 import android.graphics.Bitmap; 5 import android.renderscript.Allocation; 6 import android.renderscript.Element; 7 import android.renderscript.RenderScript; 8 import android.renderscript.ScriptIntrinsicBlur; 9 10 import androidx.annotation.IntRange; 11 import androidx.annotation.NonNull; 12 13 public class RenderScriptGaussianBlur { 14 private RenderScript renderScript; 15 16 public RenderScriptGaussianBlur(@NonNull Context context) { 17 this.renderScript = RenderScript.create(context); 18 } 19 20 public Bitmap gaussianBlur(@IntRange(from = 1, to = 25) int radius, Bitmap original) { 21 Allocation input = Allocation.createFromBitmap(renderScript, original); 22 Allocation output = Allocation.createTyped(renderScript, input.getType()); 23 ScriptIntrinsicBlur scriptIntrinsicBlur = ScriptIntrinsicBlur.create(renderScript, Element.U8_4(renderScript)); 24 scriptIntrinsicBlur.setRadius(radius); 25 scriptIntrinsicBlur.setInput(input); 26 scriptIntrinsicBlur.forEach(output); 27 output.copyTo(original); 28 return original; 29 } 30 }
2.3 使用模糊类
1 package com.cnblogs.sjjg.gaussianblur; 2 3 import androidx.appcompat.app.AppCompatActivity; 4 5 import android.graphics.Bitmap; 6 import android.graphics.BitmapFactory; 7 import android.os.Bundle; 8 import android.widget.ImageView; 9 import android.widget.SeekBar; 10 11 public class MainActivity extends AppCompatActivity implements SeekBar.OnSeekBarChangeListener { 12 13 14 private SeekBar blurValue; 15 private ImageView image; 16 private RenderScriptGaussianBlur blur; 17 18 19 @Override 20 public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 21 22 } 23 24 @Override 25 public void onStartTrackingTouch(SeekBar seekBar) { 26 27 } 28 29 @Override 30 public void onStopTrackingTouch(SeekBar seekBar) { 31 int radius = seekBar.getProgress(); 32 if (radius < 1) { 33 radius = 1; 34 } 35 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.image); 36 bitmap = blur.gaussianBlur(radius,bitmap); 37 image.setImageBitmap(bitmap); 38 } 39 40 @Override 41 protected void onCreate(Bundle savedInstanceState) { 42 super.onCreate(savedInstanceState); 43 setContentView(R.layout.activity_main); 44 image = findViewById(R.id.imageView); 45 blurValue = findViewById(R.id.blur_value); 46 blurValue.setOnSeekBarChangeListener(this); 47 blur = new RenderScriptGaussianBlur(getBaseContext()); 48 } 49 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?