您的位置:首页 > 其它

模糊挖洞

2016-03-07 14:30 246 查看
public class MainActivity extends Activity {
Context mContext;

int count = 0;

ImageView image;
TextView blurview;
View text;

TextView clear;
int x = 500;
int y = 300;
int length = 280;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

mContext = this;

setContentView(R.layout.activity_main);

findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
count++;
if (count % 2 == 1) {
findViewById(R.id.button).setBackgroundColor(Color.parseColor("#9F3730"));
} else {
findViewById(R.id.button).setBackgroundColor(Color.parseColor("#303F9F"));
}
}
});

findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
findViewById(R.id.button2).setVisibility(View.GONE);
}
});

findViewById(R.id.button3).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// findViewById(R.id.button2).setVisibility(View.VISIBLE);
Bitmap bitmap = getCircularBitmap(
((BitmapDrawable) image.getDrawable()).getBitmap());

clear.setBackground(new BitmapDrawable(
getResources(), bitmap));
}
});

image = (ImageView) findViewById(R.id.picture);
blurview = (TextView) findViewById(R.id.blur);
clear = (TextView) findViewById(R.id.clear);
text = findViewById(R.id.text);

applyBlur();

}

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);

return true;
}
});
}

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private void blur(Bitmap bkg, View textview) {
float radius = 25;

Bitmap overlay = Bitmap.createBitmap((int) (image.getMeasuredWidth()),
(int) (image.getMeasuredHeight()), Bitmap.Config.ARGB_8888);

Canvas canvas = new Canvas(overlay);

canvas.drawBitmap(bkg, 0, 0, null);

RenderScript rs = RenderScript.create(mContext);

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);

blurview.setBackground(new BitmapDrawable(
getResources(), overlay));

rs.destroy();
}

public Bitmap getCircularBitmap(Bitmap bitmap) {
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(length, length);
lp.leftMargin = x;
lp.topMargin = y;
clear.setLayoutParams(lp);

Bitmap output;

output = Bitmap.createBitmap(length, length, Bitmap.Config.ARGB_8888);

Canvas canvas = new Canvas(output);

final int color = 0xff424242;
final Paint paint = new Paint();
final Rect rect1 = new Rect(0 + x, 0 + y, 280 + x, 280 + y);
final Rect rect2 = new Rect(0, 0, 280, 280);

float r = 140;

paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawCircle(r, r, r, paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect1, rect2, paint);

return output;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: