Android中实现iOS中的毛玻璃效果

作者:qq_20118885 时间:2023-01-27 01:44:14 

为了实现毛玻璃效果,我们需要一组compute kernels(.rs文件中编写),及一组用于控制renderScript相关的Javaapi(.rs文件自动生成为Java类)。 由于compute kernels的编写需要一定的学习成本,从JELLY_BEAN_MR1开始,Androied内置了一些compute kernels用于常用的操作,其中就包括了Gaussian blur。

下面,通过实操来讲解一下RenderScript来实现高斯模糊,最终实现效果(讲文字背景进行模糊处理):

Android中实现iOS中的毛玻璃效果Android中实现iOS中的毛玻璃效果

实现代码:


<html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"></head><body><textarea style="width:99%;height:99%">private
void applyBlur() {
 image.getViewTreeObserver().addOnPreDrawListener(new  
ViewTreeObserver.OnPreDrawListener() {
   @Override
   public boolean onPreDraw() {
     image.getViewTreeObserver().removeOnPreDrawListener(this);
     image.buildDrawingCache();
     Bitmap bmp = image.getDrawingCache();
     blur(bmp, text, true);
     return true;
   }
 });
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private void blur(Bitmap bkg, View view) {
 long startMs = System.currentTimeMillis();
 float radius = 20;
 Bitmap overlay = Bitmap.createBitmap((int)(view.getMeasuredWidth()),
(int)(view.getMeasuredHeight()), Bitmap.Config.ARGB_8888);
 Canvas canvas = new Canvas(overlay);
 canvas.translate(-view.getLeft(), -view.getTop());
 canvas.drawBitmap(bkg, 0, 0, null);
 RenderScript rs = RenderScript.create(SecondActivity.this);
 Allocation overlayAlloc = Allocation.createFromBitmap(rs, overlay);
 ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(rs,  
overlayAlloc.getElement());
 blur.setInput(overlayAlloc);
 blur.setRadius(radius);
 blur.forEach(overlayAlloc);
 overlayAlloc.copyTo(overlay);
 view.setBackground(new BitmapDrawable(getResources(), overlay));
 rs.destroy();
 statusText.setText("cost " + (System.currentTimeMillis() - startMs) +
"ms");
}</textarea></body></html>

布局如下:


<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:Android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
 <ImageView
   android:id="@+id/picture"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:src="@drawable/splash"
   android:scaleType="centerCrop" />
 <TextView
   android:id="@+id/text"
   android:gravity="center_horizontal"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:text="Gaussian Blur"
   android:textColor="@android:color/black"
   android:layout_gravity="center_vertical"
   android:textStyle="bold"
   android:textSize="48sp" />
 <LinearLayout
   android:id="@+id/controls"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:background="#7f000000"
   android:orientation="vertical"
   android:layout_gravity="bottom" />
</FrameLayout>

以上所述是小编给大家介绍的Android中实现iOS中的毛玻璃效果网站的支持!

来源:http://blog.csdn.net/qq_20118885/article/details/73135549

标签:android,ios,毛玻璃
0
投稿

猜你喜欢

  • Android加载loading对话框的功能及实例代码(不退出沉浸式效果)

    2023-05-14 01:25:33
  • Java Ehcache缓存框架入门级使用实例

    2022-08-23 20:51:54
  • 详解JAVA类加载机制

    2023-11-08 04:05:16
  • Java链表(Linked List)基本原理与实现方法入门示例

    2021-10-12 05:49:14
  • Scala异常处理的方法深入分析

    2022-01-09 19:50:35
  • 细谈java同步之JMM(Java Memory Model)

    2023-11-23 13:09:33
  • Spring事务管理方法步骤解析

    2021-12-15 20:09:04
  • java实现的DES加密算法详解

    2022-10-01 09:51:11
  • C#使用Chart绘制曲线

    2023-03-12 19:08:56
  • C#读取配置文件的方法汇总

    2022-09-13 08:55:35
  • Android内置的OkHttp用法介绍

    2021-11-29 01:00:53
  • 深入理解SpringMVC中央调度器DispatcherServlet

    2023-03-11 08:54:48
  • Android重要控件SnackBar使用方法详解

    2022-11-10 04:49:41
  • 深入理解Java中的弱引用

    2023-07-19 20:14:53
  • springMVC+ajax实现文件上传且带进度条实例

    2022-01-15 16:42:36
  • Java线程生命周期的终止与复位

    2022-04-22 01:57:01
  • C#中using的三种用法

    2022-08-04 05:10:59
  • spring cloud升级到spring boot 2.x/Finchley.RELEASE遇到的坑

    2022-01-04 20:40:56
  • C#添加、读取Word脚注尾注的方法

    2022-12-24 02:12:22
  • Android SlidingDrawer 抽屉效果的实现

    2023-08-02 07:58:30
  • asp之家 软件编程 m.aspxhome.com