Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v1.1.0 #45

Merged
merged 6 commits into from
Nov 1, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions blurkit/build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
plugins {
id 'com.android.library'
id 'kotlin-android'
id 'com.github.dcendents.android-maven' version '1.5'
}

Expand Down Expand Up @@ -35,7 +34,6 @@ android {
}

dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:1.10.19'
androidTestImplementation 'com.android.support:support-annotations:28.0.0'
Expand Down
17 changes: 15 additions & 2 deletions blurkit/src/main/java/io/alterac/blurkit/BlurKit.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public static void init(Context context) {
}

instance = new BlurKit();
rs = RenderScript.create(context);
rs = RenderScript.create(context.getApplicationContext());
}

public Bitmap blur(Bitmap src, int radius) {
Expand All @@ -39,7 +39,7 @@ public Bitmap blur(Bitmap src, int radius) {
}

public Bitmap blur(View src, int radius) {
Bitmap bitmap = getBitmapForView(src, FULL_SCALE);
Bitmap bitmap = getBitmapForView(src);
return blur(bitmap, radius);
}

Expand All @@ -64,6 +64,19 @@ private Bitmap getBitmapForView(View src, float downscaleFactor) {
return bitmap;
}

private Bitmap getBitmapForView(View src) {
Bitmap bitmap = Bitmap.createBitmap(
src.getWidth(),
src.getHeight(),
Bitmap.Config.ARGB_8888
);

Canvas canvas = new Canvas(bitmap);
src.draw(canvas);

return bitmap;
}

public static BlurKit getInstance() {
if (instance == null) {
throw new RuntimeException("BlurKit not initialized!");
Expand Down
47 changes: 41 additions & 6 deletions blurkit/src/main/java/io/alterac/blurkit/BlurLayout.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ public class BlurLayout extends FrameLayout {
public static final int DEFAULT_BLUR_RADIUS = 12;
public static final int DEFAULT_FPS = 60;
public static final float DEFAULT_CORNER_RADIUS = 0.f;
public static final float DEFAULT_ALPHA = Float.NaN;

// Customizable attributes

Expand All @@ -44,6 +45,9 @@ public class BlurLayout extends FrameLayout {
/** Corner radius for the layouts blur. To make rounded rects and circles. */
private float mCornerRadius;

/** Alpha value to set transparency */
private float mAlpha;

/** Is blur running? */
private boolean mRunning;

Expand Down Expand Up @@ -91,6 +95,7 @@ public BlurLayout(Context context, AttributeSet attrs) {
mBlurRadius = a.getInteger(R.styleable.BlurLayout_blk_blurRadius, DEFAULT_BLUR_RADIUS);
mFPS = a.getInteger(R.styleable.BlurLayout_blk_fps, DEFAULT_FPS);
mCornerRadius = a.getDimension(R.styleable.BlurLayout_blk_cornerRadius, DEFAULT_CORNER_RADIUS);
mAlpha = a.getDimension(R.styleable.BlurLayout_blk_alpha, DEFAULT_ALPHA);
} finally {
a.recycle();
}
Expand Down Expand Up @@ -195,7 +200,7 @@ private Bitmap blur() {

// Set alpha to 0 before creating the parent view bitmap.
// The blur view shouldn't be visible in the created bitmap.
setAlpha(0);
super.setAlpha(0);

// Screen sizes for bound checks
int screenWidth = mActivityView.get().getWidth();
Expand All @@ -219,13 +224,13 @@ private Bitmap blur() {
leftOffset = x + leftOffset >= 0 ? leftOffset : 0;

int rightOffset = xPadding;
rightOffset = x + getWidth() + rightOffset <= screenWidth ? rightOffset : screenWidth - getWidth() - x;
rightOffset = x + screenWidth - rightOffset <= screenWidth ? rightOffset : screenWidth + screenWidth - x;

int topOffset = -yPadding;
topOffset = y + topOffset >= 0 ? topOffset : 0;

int bottomOffset = yPadding;
bottomOffset = y + height + bottomOffset <= screenHeight ? bottomOffset : 0;
bottomOffset = y + getHeight() + bottomOffset <= screenHeight ? bottomOffset : 0;

// Parent view bitmap, downscaled with mDownscaleFactor
Bitmap bitmap;
Expand Down Expand Up @@ -279,7 +284,11 @@ private Bitmap blur() {
}

// Make self visible again.
setAlpha(1);
if (Float.isNaN(mAlpha)) {
super.setAlpha(1);
} else {
super.setAlpha(mAlpha);
}

// Set background as blurred bitmap.
return bitmap;
Expand Down Expand Up @@ -446,6 +455,25 @@ public float getCornerRadius() {
return mCornerRadius;
}

/**
* Set the alpha value
* See {@link #mAlpha}
*/
public void setAlpha(float alpha) {
mAlpha = alpha;
if (!mViewLocked) {
super.setAlpha(mAlpha);
}
}

/**
* Get alpha value.
* See {@link #mAlpha}
*/
public float getAlpha() {
return mAlpha;
}

/**
* Save the view bitmap to be re-used each frame instead of regenerating.
* See {@link #mViewLocked}.
Expand All @@ -456,9 +484,16 @@ public void lockView() {
if (mActivityView != null && mActivityView.get() != null) {
View view = mActivityView.get().getRootView();
try {
setAlpha(0f);
super.setAlpha(0f);

mLockedBitmap = getDownscaledBitmapForView(view, new Rect(0, 0, view.getWidth(), view.getHeight()), mDownscaleFactor);
setAlpha(1f);

if (Float.isNaN(mAlpha)) {
super.setAlpha(1);
} else {
super.setAlpha(mAlpha);
}

mLockedBitmap = BlurKit.getInstance().blur(mLockedBitmap, mBlurRadius);
} catch (Exception e) {
// ignore
Expand Down
69 changes: 69 additions & 0 deletions blurkit/src/main/java/io/alterac/blurkit/RoundedImageView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package io.alterac.blurkit;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.RectF;
import android.graphics.Xfermode;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;

public class RoundedImageView extends ImageView {

private float mCornerRadius = 0;
public static final int DEFAULT_COLOR = 0xff000000;
public static final int DEFAULT_RGB = 0;

private RectF rectF;
private PorterDuffXfermode porterDuffXfermode;

public RoundedImageView(Context context) {
super(context, null);
rectF = new RectF();
porterDuffXfermode = new PorterDuffXfermode(PorterDuff.Mode.SRC_IN);
}

public RoundedImageView(Context context, AttributeSet attributes) {
super(context, attributes);
rectF = new RectF();
porterDuffXfermode = new PorterDuffXfermode(PorterDuff.Mode.SRC_IN);
}

@Override
protected void onDraw(Canvas canvas) {
Drawable myDrawable = getDrawable();
if (myDrawable!=null && myDrawable instanceof BitmapDrawable && mCornerRadius > 0) {
rectF.set(myDrawable.getBounds());
int prevCount = canvas.saveLayer(rectF, null, Canvas.ALL_SAVE_FLAG);
getImageMatrix().mapRect(rectF);

Paint paint = ((BitmapDrawable) myDrawable).getPaint();
paint.setAntiAlias(true);
paint.setColor(DEFAULT_COLOR);
Xfermode prevMode = paint.getXfermode();

canvas.drawARGB(DEFAULT_RGB, DEFAULT_RGB, DEFAULT_RGB, DEFAULT_RGB);
canvas.drawRoundRect(rectF, mCornerRadius, mCornerRadius, paint);

paint.setXfermode(porterDuffXfermode);
super.onDraw(canvas);

paint.setXfermode(prevMode);
canvas.restoreToCount(prevCount);
} else {
super.onDraw(canvas);
}
}

public void setCornerRadius(float cornerRadius) {
this.mCornerRadius = cornerRadius;
}

public float getCornerRadius() {
return this.mCornerRadius;
}
}
73 changes: 0 additions & 73 deletions blurkit/src/main/java/io/alterac/blurkit/RoundedImageView.kt

This file was deleted.

1 change: 1 addition & 0 deletions blurkit/src/main/res/values/attrs.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
<attr name="blk_blurRadius" format="integer" />
<attr name="blk_fps" format="integer" />
<attr name="blk_cornerRadius" format="dimension" />
<attr name="blk_alpha" format="float" />
</declare-styleable>

</resources>
2 changes: 0 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
ext.kotlin_version = '1.2.71'
repositories {
jcenter()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.1'
}
}
Expand Down