renderscriptTargetApi 18 renderscriptSupportModeEnabled true
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="20dp"> <FrameLayout android:layout_width="300dp" android:layout_height="300dp" android:layout_centerInParent="true"> <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="centerCrop" android:src="@drawable/img"/> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Melody" android:textColor="@android:color/white" android:textSize="45sp"/> </FrameLayout> </RelativeLayout>
public class MainActivity extends Activity implements Runnable {
private static final String TAG = "MainActivity";
private ImageView mImage;
private TextView mText;
@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(this);
}
@Override
public void run() {
blur(getImageViewBitmap(mImage), mText);
}
/**
* 取出一个imageView的bitmap背景
*/
public Bitmap getImageViewBitmap(ImageView imageView) {
imageView.setDrawingCacheEnabled(true);
// 取出ImageView的Bitmap
Bitmap bitmap = imageView.getDrawingCache();
// 拷贝一份bitmap用作模糊
Bitmap bitmapCopy = bitmap.copy(bitmap.getConfig(), true);
imageView.setDrawingCacheEnabled(false);
return bitmapCopy;
}
/**
* 模糊的具体实现
*
* @param inputBitmap 要模糊的 bitmap
* @param targetView 需要被模糊背景的 View
*/
public void blur(Bitmap inputBitmap, View targetView) {
// 创建一个和目标View(需要背景被模糊的View)宽高一样的空的 outputBitmap
Bitmap outputBitmap = Bitmap.createBitmap((int) (targetView.getMeasuredWidth()),
(int) (targetView.getMeasuredHeight()), Bitmap.Config.ARGB_8888);
// 将 outputBitmap 关联在 canvas 上
Canvas canvas = new Canvas(outputBitmap);
// 画布移动到目标 View 在父布局中的位置
canvas.translate(-targetView.getLeft(), -targetView.getTop());
Paint paint = new Paint();
paint.setFlags(Paint.FILTER_BITMAP_FLAG);
// 将要模糊的 inputBitmap 绘制到 outputBitmap 上
// 因为刚才做了 translate 操作,这样就可以裁剪到目标 View 在父布局内的那一块背景到 outputBitmap 上
canvas.drawBitmap(inputBitmap, 0, 0, paint);
// ----接下来做模糊 outputBitmap 处理操作----
// 创建 RenderScript
RenderScript rs = RenderScript.create(this);
Allocation input = Allocation.createFromBitmap(rs, outputBitmap);
Allocation output = Allocation.createTyped(rs, input.getType());
// 使用 ScriptIntrinsicBlur 类来模糊图片
ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(
rs, Element.U8_4(rs));
// 设置模糊半径 ( 取值范围为( 0.0f , 25f ] ,半径越大,模糊效果也越大)
blur.setRadius(25f);
blur.setInput(input);
// 模糊计算
blur.forEach(output);
// 模糊 outputBitmap
output.copyTo(outputBitmap);
// 将模糊后的 outputBitmap 设为目标 View 的背景
targetView.setBackground(new BitmapDrawable(getResources(), outputBitmap));
rs.destroy();
}
}
import android.support.v8.renderscript.Allocation; import android.support.v8.renderscript.Element; import android.support.v8.renderscript.RenderScript; import android.support.v8.renderscript.ScriptIntrinsicBlur;
... <TextView android:id="@+id/text" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="Melody" android:textColor="@android:color/white" android:textSize="45sp"/> ...
10-09 17:04:23.664 23665-23665/com.melodyxxx.blurdemo2 E/MainActivity: spend: 120ms
... Bitmap outputBitmap = Bitmap.createBitmap((int) (mTargetView.getMeasuredWidth() / scaleFactor), (int) (mTargetView.getMeasuredHeight() / scaleFactor), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(outputBitmap); canvas.translate(-mTargetView.getLeft() / scaleFactor, -mTargetView.getTop() / scaleFactor); canvas.scale(1 / scaleFactor, 1 / scaleFactor); Paint paint = new Paint(); paint.setFlags(Paint.FILTER_BITMAP_FLAG); canvas.drawBitmap(mInputBitmap, 0, 0, paint); ...
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有