自定义View(9)关于onLayout
1.渲染脚本官网
https://developer.android.com/guide/topics/renderscript/compute
2.高斯模糊 ScriptIntrinsicBlur
2.1 添加api
在module 的 build.gradle 文件中添加选项,注意是 defaultConfig中。
 android {
     compileSdkVersion 28
     defaultConfig {
         applicationId "com.cnblogs.sjjg.gaussianblur"
         minSdkVersion 17
         targetSdkVersion 28
         versionCode 1
         versionName "1.0"
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
         renderscriptTargetApi 18
11         renderscriptSupportModeEnabled true
     }
     buildTypes {
         release {
             minifyEnabled false
             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
         }
     }
 }
 dependencies {
     implementation fileTree(dir: 'libs', include: ['*.jar'])
     implementation 'androidx.appcompat:appcompat:1.0.2'
     implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
     testImplementation 'junit:junit:4.12'
     androidTestImplementation 'androidx.test:runner:1.2.0'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
 }
2.2 添加模糊工具类
package com.cnblogs.sjjg.gaussianblur; 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 androidx.annotation.IntRange;
import androidx.annotation.NonNull; public class RenderScriptGaussianBlur {
private RenderScript renderScript; public RenderScriptGaussianBlur(@NonNull Context context) {
this.renderScript = RenderScript.create(context);
} public Bitmap gaussianBlur(@IntRange(from = , to = ) int radius, Bitmap original) {
Allocation input = Allocation.createFromBitmap(renderScript, original);
Allocation output = Allocation.createTyped(renderScript, input.getType());
ScriptIntrinsicBlur scriptIntrinsicBlur = ScriptIntrinsicBlur.create(renderScript, Element.U8_4(renderScript));
scriptIntrinsicBlur.setRadius(radius);
scriptIntrinsicBlur.setInput(input);
scriptIntrinsicBlur.forEach(output);
output.copyTo(original);
return original;
}
}
2.3 使用模糊类
package com.cnblogs.sjjg.gaussianblur; import androidx.appcompat.app.AppCompatActivity; import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.SeekBar; public class MainActivity extends AppCompatActivity implements SeekBar.OnSeekBarChangeListener { private SeekBar blurValue;
private ImageView image;
private RenderScriptGaussianBlur blur; @Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { } @Override
public void onStartTrackingTouch(SeekBar seekBar) { } @Override
public void onStopTrackingTouch(SeekBar seekBar) {
int radius = seekBar.getProgress();
if (radius < ) {
radius = ;
}
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.image);
bitmap = blur.gaussianBlur(radius,bitmap);
image.setImageBitmap(bitmap);
} @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
image = findViewById(R.id.imageView);
blurValue = findViewById(R.id.blur_value);
blurValue.setOnSeekBarChangeListener(this);
blur = new RenderScriptGaussianBlur(getBaseContext());
}
}
2.4 效果

2.5 下载
https://github.com/f9q/gaussianblur
自定义View(9)关于onLayout的更多相关文章
- 自定义View(五),onLayout
		转自http://blog.csdn.net/a396901990/article/details/38129669 简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量——onM ... 
- 【Android - 自定义View】之自定义View实现“刮刮卡”效果
		首先来介绍一下这个自定义View: (1)这个自定义View的名字叫做 GuaguakaView ,继承自View类: (2)这个View实现了很多电商项目中的“刮刮卡”的效果,即用户可以刮开覆盖层, ... 
- Android之自定义View的实现
		对于学习Android开发的小童鞋对于自定义View一定不会陌生,相信大家对它是又爱又恨,爱它可以跟随我们的心意设计出漂亮的效果:恨它想要完全流畅掌握,需要一定的功夫.对于初学者来说确实很不容易,网上 ... 
- 自定义View其实很简单系列1-12
		作者: AigeStudio http://blog.csdn.net/aigestudio 说明:文中的1/12表示12篇中的第1篇, 1/6=2/12表示12篇中的第2篇,其它类似. 自定义控件 ... 
- Android 自定义View
		Android 自定义View流程中的几个方法解析: onFinishInflate():从布局文件.xml加载完组件后回调 onMeasure() :调用该方法负责测量组件大小 onSizeChan ... 
- Android 自定义View 总结
		Android系统本身给我们提供十分丰硕的组件让我们实现包罗万象的UI效果,与此同时,我们也能够非常方便实现各种方法来实现各种强大的功能.通过继承现有的UI控件,我们也能够拓展现有的功能.我们也能够完 ... 
- Android 自定义View 三板斧之三——重写View来实现全新控件
		通常情况下,Android实现自定义控件无非三种方式. Ⅰ.继承现有控件,对其控件的功能进行拓展. Ⅱ.将现有控件进行组合,实现功能更加强大控件. Ⅲ.重写View实现全新的控件 本文来讨论最难的一种 ... 
- Android 自定义View及其在布局文件中的使用示例(三):结合Android 4.4.2_r1源码分析onMeasure过程
		转载请注明出处 http://www.cnblogs.com/crashmaker/p/3549365.html From crash_coder linguowu linguowu0622@gami ... 
- Android 自定义View及其在布局文件中的使用示例(二)
		转载请注明出处 http://www.cnblogs.com/crashmaker/p/3530213.html From crash_coder linguowu linguowu0622@gami ... 
随机推荐
- 02.XMemcached的使用
			关于XMemcached的介绍或文档请参考:https://code.google.com/p/xmemcached/wiki/User_Guide_zh 关于Memcached的命令 ... 
- NSStream
			NSStream 流是位数据通过通信路径的连续传送序列.它是单向的,从一个应用程序的角度,流可以是输入流(读操作流)或者输出流(写操作流),除了基于文件的流之外,其余的都是non-seekable的. ... 
- thinkphp中SQLSTATE[42S02]: Base table or view not found: 1146 Table错误解决方法
			随手记录下今天在thinkphp3.2.3中遇到的错误SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.file_info ... 
- 《深入浅出JavaScript》
			第一章JS入门 第二章数据和判定常用的转义序列\b 回退 \f换页 \n换行 \r回车 \t制表符 \'单引 \"双引 \\反斜乘除求余的优先级相同,从左向右执行string对象indexO ... 
- hive的学习入门(飞进数据仓库的小蜜蜂)
			前言 hive是构建在Hadoop上的数据仓库平台,其设计目标是:使Hadoop上的数据操作与传统的SQL结合,让熟悉sql的开发人员能够轻松的像Hadoop平台迁移. Hive是Facebook的信 ... 
- web访问速度优化分析
			请求从发出到接收完成一共经历了DNS Lookup.Connecting.Blocking.Sending.Waiting和Receiving六个阶段,时间共计38ms.请求完成之后是DOM加载和页面 ... 
- rm删除命令
			linux中删除文件和目录的命令: rm命令.rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除.对于链接文件,只是删除了链接,原有 ... 
- iOS第三方推送-极光推送
			@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ... 
- [C++]iostream的几种输入形式
			做ACM题的时候,发现cin并不能满足所有输入要求.比如说: 每行给出一款运动鞋信息,若该款写不打折,则先后给出每种运动鞋单价P,所购买的数量Q:若打折,则先后给出每种运动鞋单价P,所购买的数量Q,折 ... 
- css系列-段落首字符下沉、缩进及特殊显示
			<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ... 
