Skip to content

Commit 95e713e

Browse files
committed
add: Adapt Jetpack Compose
1 parent df8aff9 commit 95e713e

File tree

7 files changed

+155
-31
lines changed

7 files changed

+155
-31
lines changed

.idea/gradle.xml

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/build.gradle

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ android {
77

88
defaultConfig {
99
applicationId "net.center.blurview.demo"
10-
minSdk 19
10+
minSdk 21
1111
targetSdk 31
1212
versionCode 1
1313
versionName "1.0"
@@ -27,6 +27,14 @@ android {
2727
kotlinOptions {
2828
jvmTarget = '1.8'
2929
}
30+
31+
composeOptions {
32+
kotlinCompilerExtensionVersion '1.0.3'
33+
}
34+
35+
buildFeatures {
36+
compose = true
37+
}
3038
}
3139

3240
dependencies {
@@ -35,6 +43,12 @@ dependencies {
3543
implementation 'androidx.appcompat:appcompat:1.4.1'
3644
implementation "androidx.constraintlayout:constraintlayout:2.1.3"
3745

46+
implementation("androidx.compose.ui:ui:1.1.0")
47+
implementation("androidx.compose.material:material:1.1.0")
48+
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0")
49+
implementation("androidx.compose.ui:ui-tooling-preview:1.1.0")
50+
debugImplementation("androidx.compose.ui:ui-tooling:1.1.0")
51+
3852
// implementation 'com.github.centerzx:ShapeBlurView:1.0.3'
3953
implementation(project(":blurview"))
4054
}

app/src/main/java/net/center/blurview/demo/TestActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class TestActivity : AppCompatActivity() {
1818
super.onCreate(savedInstanceState)
1919
setContentView(R.layout.activity_test)
2020
// blurview?.refreshView(
21-
// ShapeBlurView.build().setBlurMode(BlurMode.MODE_RECTANGLE)
21+
// BlurView.build().setBlurMode(BlurMode.MODE_RECTANGLE)
2222
// .setCornerRadius(BlurCorner.TOP_LEFT, 50f).setBorderWidth(10f)
2323
// .setBorderColor(
2424
// R.color.teal_200
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package net.center.blurview.demo
2+
3+
import androidx.compose.foundation.Image
4+
import androidx.compose.foundation.layout.Box
5+
import androidx.compose.foundation.layout.height
6+
import androidx.compose.foundation.layout.offset
7+
import androidx.compose.foundation.layout.width
8+
import androidx.compose.runtime.Composable
9+
import androidx.compose.ui.Modifier
10+
import androidx.compose.ui.res.painterResource
11+
import androidx.compose.ui.tooling.preview.Preview
12+
import androidx.compose.ui.unit.dp
13+
import net.center.blurview.ShapeBlurView
14+
import net.center.blurview.compose.BlurView
15+
16+
/**
17+
* @author: orangeboy
18+
* @createTime: 2022/10/31 19:25
19+
* @description:
20+
*/
21+
@Preview(showBackground = true)
22+
@Composable
23+
fun BlurComposeExample() {
24+
Box {
25+
Image(painter = painterResource(id = R.mipmap.test), contentDescription = null)
26+
BlurView(
27+
modifier = Modifier.height(100.dp).width(100.dp).offset(x = 30.dp, y = 30.dp),
28+
config = ShapeBlurView.Config().apply {
29+
this.cornerRadiusOverride = 50f
30+
})
31+
}
32+
}

blurview/build.gradle

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
plugins {
22
id 'com.android.library'
33
id 'org.jetbrains.kotlin.android'
4-
54
id 'maven-publish'//用来推送aar到jitpack
65
id 'pl.allegro.tech.build.axion-release' version '1.13.6'//用来发行aar版本的插件
76
}
@@ -51,7 +50,7 @@ android {
5150
compileSdk 31
5251

5352
defaultConfig {
54-
minSdk 19
53+
minSdk 21
5554
targetSdk 31
5655

5756
consumerProguardFiles "consumer-rules.pro"
@@ -70,8 +69,22 @@ android {
7069
kotlinOptions {
7170
jvmTarget = '1.8'
7271
}
72+
composeOptions {
73+
kotlinCompilerExtensionVersion '1.0.3'
74+
}
75+
76+
buildFeatures {
77+
compose = true
78+
}
7379
}
7480

7581
dependencies {
82+
implementation 'androidx.core:core-ktx:1.7.0'
7683
compileOnly 'androidx.appcompat:appcompat:1.4.1'
84+
85+
implementation("androidx.compose.ui:ui:1.1.0")
86+
implementation("androidx.compose.material:material:1.1.0")
87+
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0")
88+
implementation("androidx.compose.ui:ui-tooling-preview:1.1.0")
89+
debugImplementation("androidx.compose.ui:ui-tooling:1.1.0")
7790
}

blurview/src/main/java/net/center/blurview/ShapeBlurView.java

Lines changed: 69 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public class ShapeBlurView extends View {
5858
private float mBlurRadius;
5959
public static final int DEFAULT_BORDER_COLOR = Color.WHITE;
6060

61-
private final BlurImpl mBlurImpl;
61+
private BlurImpl mBlurImpl;
6262
private boolean mDirty;
6363
private Bitmap mBitmapToBlur, mBlurredBitmap;
6464
private Canvas mBlurringCanvas;
@@ -80,7 +80,7 @@ public class ShapeBlurView extends View {
8080
private static int BLUR_IMPL;
8181

8282
private int blurMode = BlurMode.MODE_RECTANGLE;
83-
private final Paint mBitmapPaint;
83+
private Paint mBitmapPaint;
8484
//圆形 相关
8585
private float cx = 0, cy = 0, cRadius = 0;
8686

@@ -94,62 +94,105 @@ public class ShapeBlurView extends View {
9494
private static final float DEFAULT_BORDER_WIDTH = 0f;
9595

9696
private final RectF mBorderRect = new RectF();
97-
private final Paint mBorderPaint;
97+
private Paint mBorderPaint;
9898
private float mBorderWidth = 0;
9999
private ColorStateList mBorderColor = ColorStateList.valueOf(DEFAULT_BORDER_COLOR);
100100
private Matrix matrix = new Matrix();
101101
private BitmapShader shader;
102102

103+
public static class Config {
104+
public float blurRadius = 25.0f;
105+
public float downSampleFactor = 4f;
106+
public int overlayColor = 0x000000;
107+
108+
public float cornerRadiusOverride = -1;
109+
public float cornerTopLeft = -1;
110+
public float cornerTopRight = -1;
111+
public float cornerBottomRight = -1;
112+
public float cornerBottomLeft = -1;
113+
114+
public int blurMode = BlurMode.MODE_RECTANGLE;
115+
116+
public float borderWidth = DEFAULT_BORDER_WIDTH;
117+
public ColorStateList borderColor = ColorStateList.valueOf(DEFAULT_BORDER_COLOR);
118+
}
119+
120+
public ShapeBlurView(Context context, Config config) {
121+
super(context);
122+
mContext = context;
123+
mBlurImpl = getBlurImpl();
124+
125+
initConfig(config);
126+
127+
128+
}
129+
103130
public ShapeBlurView(Context context, AttributeSet attrs) {
104131
super(context, attrs);
105132
mContext = context;
106-
// provide your own by override getBlurImpl()
107133
mBlurImpl = getBlurImpl();
134+
135+
Config config = new Config();
108136
try {
109137
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ShapeBlurView);
110-
mBlurRadius = a.getDimension(R.styleable.ShapeBlurView_blur_radius,
138+
config.blurRadius = a.getDimension(R.styleable.ShapeBlurView_blur_radius,
111139
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, context.getResources().getDisplayMetrics()));
112-
mDownSampleFactor = a.getFloat(R.styleable.ShapeBlurView_blur_down_sample, 4);
113-
mOverlayColor = a.getColor(R.styleable.ShapeBlurView_blur_overlay_color, 0x000000);
140+
config.downSampleFactor = a.getFloat(R.styleable.ShapeBlurView_blur_down_sample, 4);
141+
config.overlayColor = a.getColor(R.styleable.ShapeBlurView_blur_overlay_color, 0x000000);
114142

115-
float cornerRadiusOverride =
143+
config.cornerRadiusOverride =
116144
a.getDimensionPixelSize(R.styleable.ShapeBlurView_blur_corner_radius, -1);
117-
mCornerRadii[BlurCorner.TOP_LEFT] =
145+
config.cornerTopLeft =
118146
a.getDimensionPixelSize(R.styleable.ShapeBlurView_blur_corner_radius_top_left, -1);
119-
mCornerRadii[BlurCorner.TOP_RIGHT] =
147+
config.cornerTopRight =
120148
a.getDimensionPixelSize(R.styleable.ShapeBlurView_blur_corner_radius_top_right, -1);
121-
mCornerRadii[BlurCorner.BOTTOM_RIGHT] =
149+
config.cornerBottomRight =
122150
a.getDimensionPixelSize(R.styleable.ShapeBlurView_blur_corner_radius_bottom_right, -1);
123-
mCornerRadii[BlurCorner.BOTTOM_LEFT] =
151+
config.cornerBottomLeft =
124152
a.getDimensionPixelSize(R.styleable.ShapeBlurView_blur_corner_radius_bottom_left, -1);
125-
initCornerData(cornerRadiusOverride);
126-
blurMode = a.getInt(R.styleable.ShapeBlurView_blur_mode, BlurMode.MODE_RECTANGLE);
127-
128-
mBorderWidth = a.getDimensionPixelSize(R.styleable.ShapeBlurView_blur_border_width, -1);
129-
if (mBorderWidth < 0) {
130-
mBorderWidth = DEFAULT_BORDER_WIDTH;
131-
}
132-
mBorderColor = a.getColorStateList(R.styleable.ShapeBlurView_blur_border_color);
133-
if (mBorderColor == null) {
134-
mBorderColor = ColorStateList.valueOf(DEFAULT_BORDER_COLOR);
135-
}
153+
config.blurMode = a.getInt(R.styleable.ShapeBlurView_blur_mode, BlurMode.MODE_RECTANGLE);
136154

155+
config.borderWidth = a.getDimensionPixelSize(R.styleable.ShapeBlurView_blur_border_width, -1);
156+
config.borderColor = a.getColorStateList(R.styleable.ShapeBlurView_blur_border_color);
137157

138158
a.recycle();
139159
} catch (Exception e) {
140160
e.printStackTrace();
141161
}
162+
initConfig(config);
163+
}
164+
165+
private void initConfig(Config config) {
166+
mBlurRadius = config.blurRadius;
167+
mDownSampleFactor = config.downSampleFactor;
168+
mOverlayColor = config.overlayColor;
169+
170+
mCornerRadii[BlurCorner.TOP_LEFT] = config.cornerTopLeft;
171+
mCornerRadii[BlurCorner.TOP_RIGHT] = config.cornerTopRight;
172+
mCornerRadii[BlurCorner.BOTTOM_RIGHT] = config.cornerBottomRight;
173+
mCornerRadii[BlurCorner.BOTTOM_LEFT] = config.cornerBottomLeft;
174+
initCornerData(config.cornerRadiusOverride);
175+
176+
blurMode = config.blurMode;
177+
mBorderWidth = config.borderWidth;
178+
if (mBorderWidth == -1) {
179+
mBorderWidth = DEFAULT_BORDER_WIDTH;
180+
}
181+
182+
mBorderColor = config.borderColor;
183+
if (mBorderColor == null) {
184+
mBorderColor = ColorStateList.valueOf(DEFAULT_BORDER_COLOR);
185+
}
186+
187+
142188
mBitmapPaint = new Paint();
143189
// mBitmapPaint.setStyle(Paint.Style.FILL);
144190
mBitmapPaint.setAntiAlias(true);
145-
146191
mBorderPaint = new Paint();
147192
mBorderPaint.setStyle(Paint.Style.STROKE);
148193
mBorderPaint.setAntiAlias(true);
149194
mBorderPaint.setColor(mBorderColor.getColorForState(getState(), DEFAULT_BORDER_COLOR));
150195
mBorderPaint.setStrokeWidth(mBorderWidth);
151-
152-
// matrix = new Matrix();
153196
}
154197

155198
private void initCornerData(float cornerRadiusOverride) {
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package net.center.blurview.compose
2+
3+
import androidx.compose.runtime.Composable
4+
import androidx.compose.ui.Modifier
5+
import androidx.compose.ui.viewinterop.AndroidView
6+
import net.center.blurview.ShapeBlurView
7+
8+
/**
9+
* @author: orangeboy
10+
* @createTime: 2022/10/31 19:12
11+
* @description:
12+
*/
13+
@Composable
14+
fun BlurView(
15+
modifier: Modifier = Modifier,
16+
config: ShapeBlurView.Config = ShapeBlurView.Config()) {
17+
AndroidView(
18+
factory = { context ->
19+
ShapeBlurView(context, config)
20+
},
21+
modifier = modifier
22+
)
23+
}

0 commit comments

Comments
 (0)