1
1
package com.smarttoolfactory.tutorial1_1basics.chapter6_graphics
2
2
3
3
import android.graphics.Bitmap
4
+ import android.os.Build
5
+ import androidx.annotation.RequiresApi
4
6
import androidx.compose.animation.core.Animatable
5
7
import androidx.compose.animation.core.LinearEasing
6
8
import androidx.compose.animation.core.tween
7
9
import androidx.compose.foundation.Canvas
8
10
import androidx.compose.foundation.Image
11
+ import androidx.compose.foundation.background
9
12
import androidx.compose.foundation.border
10
13
import androidx.compose.foundation.clickable
11
14
import androidx.compose.foundation.gestures.detectTapGestures
12
15
import androidx.compose.foundation.layout.Arrangement
16
+ import androidx.compose.foundation.layout.Box
13
17
import androidx.compose.foundation.layout.Column
14
18
import androidx.compose.foundation.layout.Row
19
+ import androidx.compose.foundation.layout.Spacer
15
20
import androidx.compose.foundation.layout.aspectRatio
16
21
import androidx.compose.foundation.layout.fillMaxSize
17
22
import androidx.compose.foundation.layout.fillMaxWidth
23
+ import androidx.compose.foundation.layout.height
18
24
import androidx.compose.foundation.layout.padding
19
25
import androidx.compose.foundation.layout.size
26
+ import androidx.compose.foundation.lazy.LazyColumn
20
27
import androidx.compose.foundation.rememberScrollState
21
28
import androidx.compose.foundation.shape.RoundedCornerShape
22
29
import androidx.compose.foundation.verticalScroll
@@ -32,6 +39,7 @@ import androidx.compose.runtime.remember
32
39
import androidx.compose.runtime.rememberCoroutineScope
33
40
import androidx.compose.runtime.setValue
34
41
import androidx.compose.ui.Modifier
42
+ import androidx.compose.ui.draw.clipToBounds
35
43
import androidx.compose.ui.draw.drawWithCache
36
44
import androidx.compose.ui.draw.drawWithContent
37
45
import androidx.compose.ui.draw.shadow
@@ -56,12 +64,58 @@ import androidx.compose.ui.unit.dp
56
64
import androidx.compose.ui.unit.sp
57
65
import com.smarttoolfactory.tutorial1_1basics.R
58
66
import com.smarttoolfactory.tutorial1_1basics.chapter2_material_widgets.CheckBoxWithTextRippleFullRow
67
+ import com.smarttoolfactory.tutorial1_1basics.ui.backgroundColor
59
68
import kotlinx.coroutines.launch
60
69
import kotlin.random.Random
61
70
71
+ @RequiresApi(Build .VERSION_CODES .S )
62
72
@Preview
63
73
@Composable
64
- fun GraphicsLayerToImageBitmapSample () {
74
+ private fun GraphicsLayerSample () {
75
+ val graphicsLayer = rememberGraphicsLayer()
76
+
77
+ Column {
78
+ Canvas (
79
+ Modifier .fillMaxWidth()
80
+ .border(2 .dp, Color .Red )
81
+ .clipToBounds()
82
+ .aspectRatio(4 / 3f )
83
+ ) {
84
+ drawLayer(graphicsLayer)
85
+ }
86
+
87
+ Spacer (Modifier .height(16 .dp))
88
+
89
+ LazyColumn (
90
+ modifier = Modifier
91
+ .border(2 .dp, Color .Green )
92
+ .background(backgroundColor)
93
+ .fillMaxSize()
94
+ .drawWithContent {
95
+ // 🔥Without this LazyColumn does not draw its content
96
+ drawContent()
97
+ graphicsLayer.record {
98
+ this @drawWithContent.drawContent()
99
+ }
100
+ },
101
+ verticalArrangement = Arrangement .spacedBy(8 .dp)
102
+ ) {
103
+ items(100 ) {
104
+
105
+ Box (
106
+ modifier = Modifier .fillMaxWidth()
107
+ .background(Color .White , RoundedCornerShape (16 .dp)).padding(16 .dp)
108
+ ) {
109
+ androidx.compose.material3.Text (" Row $it " , fontSize = 22 .sp)
110
+ }
111
+ }
112
+ }
113
+ }
114
+ }
115
+
116
+ @Preview
117
+ @Composable
118
+ private fun GraphicsLayerToImageBitmapSample () {
65
119
66
120
val coroutineScope = rememberCoroutineScope()
67
121
val graphicsLayer = rememberGraphicsLayer()
@@ -474,7 +528,7 @@ fun InversePixelsSample() {
474
528
)
475
529
}
476
530
477
- Text (
531
+ Text (
478
532
text = " Color Filtered" ,
479
533
fontSize = 34 .sp,
480
534
modifier = Modifier .padding(vertical = 16 .dp)
0 commit comments