如何在Android中使用RenderScript实现一个毛玻璃模糊效果

  介绍

今天就跟大家聊聊有关如何在Android中使用RenderScript实现一个毛玻璃模糊效果,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

<强> RenderScript介绍

在开始之前,先看下RenderScript的官方介绍:

RenderScript是一个框架在高性能运行计算密集型任务> renderscriptTargetApi  18   renderscriptSupportModeEnabled 真正的

其中renderscriptTargetApi的值官方说的是从11到最新的API级别都可以

这样我们等下导包就可以导v8内的了。

<强>模糊背景

<强>局部模糊

先上一张我们要实现的效果图:

如何在Android中使用RenderScript实现一个毛玻璃模糊效果

这里可以看到实现的是局部模糊,在图片的正中间有一个TextView, TextView的背景部分做了模糊处理。

<强>先大致说下模糊的主要步骤(完全模糊步骤一样):

<李>

首先取出TextView在ImageView正上方处的那一块背景

<李>

然后对取出的那一块背景做模糊处理

<李>

最后把模糊处理后的背景再设为TextView的背景

这样,就可以达到我们图片中的局部模糊效果,具体的过程在代码中有详细的注释。

<强>下面先贴上布局文件:

& lt; ? xml  version=?.0“,编码=皍tf-8" ?比;   & lt;使用   ,xmlns: android=癶ttp://schemas.android.com/apk/res/android"   ,android: layout_width=癿atch_parent"   ,android: layout_height=癿atch_parent"   ,android:填充=?0 dp"比;      & lt; FrameLayout   android:才能layout_width=?00 dp"   android:才能layout_height=?00 dp"   android:才能layout_centerInParent=皌rue"比;      & lt; ImageView才能   ,,android: id=癅 + id/image"   ,,android: layout_width=癿atch_parent"   ,,android: layout_height=癿atch_parent"   ,,android: scaleType=癱enterCrop"   ,,android: src=https://www.yisu.com/zixun/" @drawable/img "/>                  

<强>再贴上java代码:

public  class  MainActivity  extends  Activity  implements  Runnable  {      ,private  static  final  String  TAG =,“MainActivity";      ,private  ImageView  mImage;   ,private  TextView 多行文字;      ,@Override   ,protected  void  onCreate (Bundle  savedInstanceState), {   super.onCreate才能(savedInstanceState);   ,,setContentView (R.layout.activity_main);   mImage 才能=,(ImageView), findViewById (R.id.image);   mText 才能=,(TextView), findViewById (R.id.text);//才能,onCreate()内无法到ImageView的背景,所以需要,post 到消息队列内稍后执行   mImage.post才能(这个);   ,}      ,@Override   ,public  void  run (), {   模糊才能(getImageViewBitmap (mImage),多行文字);   ,}/* *   *,才能取出一个imageView的位图背景   ,*/,public  Bitmap  getImageViewBitmap (ImageView  imageView), {   imageView.setDrawingCacheEnabled才能(真正的);//,才能取出ImageView的位图   Bitmap 才能;Bitmap =, imageView.getDrawingCache ();//,才能拷贝一份位图用作模糊   Bitmap 才能;bitmapCopy =, bitmap.copy (bitmap.getConfig(),,真的);   imageView.setDrawingCacheEnabled才能(假);   return 才能;bitmapCopy;   ,}/* *   *,才能模糊的具体实现   ,*   *,才能@param  inputBitmap 要模糊的,位图   *,才能@param  targetView 需要被模糊背景的,视图   ,*/,public  void 模糊(Bitmap  inputBitmap, View  targetView), {//,才能创建一个和目标视图(需要背景被模糊的视图)宽高一样的空的,outputBitmap   Bitmap 才能;outputBitmap =, Bitmap.createBitmap ((int), (targetView.getMeasuredWidth ()),   ,,,(int), (targetView.getMeasuredHeight ()),, Bitmap.Config.ARGB_8888);//,才能将,outputBitmap 关联在,canvas 上   Canvas 才能;Canvas =, new 画布(outputBitmap);//,才能画布移动到目标,View 在父布局中的位置   canvas.translate才能(-targetView.getLeft (),, -targetView.getTop ());   Paint 才能;Paint =, new 油漆();   paint.setFlags才能(Paint.FILTER_BITMAP_FLAG);//,才能将要模糊的,inputBitmap 绘制到,outputBitmap 上//才能,因为刚才做了,translate 操作,这样就可以裁剪到目标,View 在父布局内的那一块背景到,outputBitmap 上   canvas.drawBitmap才能(inputBitmap, 0, 0,,油漆);//,才能——接下来做模糊,outputBitmap 处理操作- - - - -//,才能创建,渲染脚本   RenderScript 才能;rs =, RenderScript.create(这个);   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

如何在Android中使用RenderScript实现一个毛玻璃模糊效果