Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
nanihadesuka committed Mar 17, 2024
2 parents 5683839 + de93bf0 commit 962c07b
Show file tree
Hide file tree
Showing 8 changed files with 986 additions and 13 deletions.
44 changes: 40 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@
Compose implementation of the scroll bar. Can drag, scroll smoothly and includes animations.

### Features:
- Support for LazyColumn's sticky headers
- Support for LazyColumn's reverseLayout
- Supports LazyColumn, LazyVerticalGrid & Column
- Support sticky headers
- Support reverseLayout
- Optional current position indicator
- Multiple selection states (Disabled, Full, Thumb)
- Multiple selection actionable states (Always, WhenVisible)
Expand All @@ -32,11 +33,11 @@ Add it to your app build.gradle

```groovy
dependencies {
implementation 'com.github.nanihadesuka:LazyColumnScrollbar:1.8.0'
implementation 'com.github.nanihadesuka:LazyColumnScrollbar:1.9.0'
}
```

# How to use for lazyColumn
# How to use for LazyColumn

Simply wrap the LazyColumn with it

Expand Down Expand Up @@ -93,6 +94,41 @@ fun LazyColumnScrollbar(
)
```

# How to use for LazyVerticalGrid

Simply wrap the LazyVerticalGrid with it

```kotlin
val listData = (0..1000).toList()
val lazyGridState = rememberLazyGridState()

LazyGridVerticalScrollbar(lazyGridState) {
LazyVerticalGrid(state = lazyGridState) {
items(listData) {
Text(
text = "Item $it",
modifier = Modifier
.fillMaxWidth()
.padding(6.dp)
)
}
}
}
```

indicatorContent example:
```kotlin
indicatorContent = { index, isThumbSelected ->
Text(
text = "i: $index",
Modifier
.padding(4.dp)
.background(if (isThumbSelected) Color.Red else Color.Black, CircleShape)
.padding(12.dp)
)
}
```

# How to use for Column
Simply wrap the LazyColumn with it

Expand Down
4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ android {
applicationId "my.nanihadesuka.lazycolumnscrollbar"
minSdk 21
targetSdk 33
versionCode 6
versionName "1.4.0"
versionCode 7
versionName "1.5.0"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,16 @@ import androidx.activity.compose.setContent
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.grid.GridCells
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
import androidx.compose.foundation.lazy.grid.rememberLazyGridState
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.foundation.rememberScrollState
Expand All @@ -21,14 +26,19 @@ import androidx.compose.material.MaterialTheme
import androidx.compose.material.Surface
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import my.nanihadesuka.compose.ColumnScrollbar
import my.nanihadesuka.compose.LazyColumnScrollbar
import my.nanihadesuka.compose.LazyGridVerticalScrollbar
import my.nanihadesuka.compose.ScrollbarSelectionMode
import my.nanihadesuka.lazycolumnscrollbar.ui.theme.LazyColumnScrollbarTheme

Expand All @@ -44,8 +54,9 @@ class MainActivity : ComponentActivity() {
fun MainView() {
LazyColumnScrollbarTheme {
Surface(color = MaterialTheme.colors.background) {
LazyColumnView()
// LazyColumnView()
// ColumnView()
lazyGridView()
}
}
}
Expand Down Expand Up @@ -118,6 +129,72 @@ fun LazyColumnView() {
}
}

@Composable
fun lazyGridView(){
val photos by rememberSaveable {
mutableStateOf(List(100) { it })
}

val lazyGridState = rememberLazyGridState()
Box(
modifier = Modifier
.padding(16.dp)
.border(width = 1.dp, MaterialTheme.colors.primary)
.padding(1.dp)
){
LazyGridVerticalScrollbar(
state = lazyGridState,
selectionMode = ScrollbarSelectionMode.Thumb,
alwaysShowScrollBar = true,
indicatorContent = { index, isThumbSelected ->
Surface {
Text(
text = "i: $index",
modifier = Modifier
.clip(
RoundedCornerShape(
topStart = 20.dp,
bottomStart = 20.dp,
bottomEnd = 16.dp
)
)
.background(Color.Green)
.padding(8.dp)
.clip(CircleShape)
.background(if (isThumbSelected) Color.Blue else Color.Yellow)
.padding(12.dp),
color = Color.Red
)
}
}
){
LazyVerticalGrid(
state = lazyGridState,
columns = GridCells.Adaptive(minSize = 128.dp),
verticalArrangement = Arrangement.spacedBy(3.dp),
horizontalArrangement = Arrangement.spacedBy(3.dp),
) {
items(photos.size, key = { it }) {
Surface(
elevation = 3.dp,
modifier = Modifier.aspectRatio(1f),
color = Color.Yellow
) {
Text(
text = "Item $it",
modifier = Modifier
.padding(24.dp),
color = Color.Black
)

}
}
}
}

}
}

@Composable
fun ColumnView() {
val listData = (0..100).toList()
Expand Down
4 changes: 2 additions & 2 deletions lib/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ android {
defaultConfig {
minSdk 21
targetSdk 33
versionCode 18
versionName "1.8.0"
versionCode 19
versionName "1.9.0"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles "consumer-rules.pro"
Expand Down
3 changes: 2 additions & 1 deletion lib/src/main/java/my/nanihadesuka/compose/ColumnScrollbar.kt
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ import kotlinx.coroutines.launch
@Composable
fun ColumnScrollbar(
state: ScrollState,
modifier: Modifier = Modifier,
rightSide: Boolean = true,
alwaysShowScrollBar: Boolean = false,
thickness: Dp = 6.dp,
Expand All @@ -65,7 +66,7 @@ fun ColumnScrollbar(
content: @Composable () -> Unit
) {
if (!enabled) content()
else BoxWithConstraints {
else BoxWithConstraints(modifier = modifier) {
content()
InternalColumnScrollbar(
state = state,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.gestures.draggable
import androidx.compose.foundation.gestures.rememberDraggableState
import androidx.compose.foundation.gestures.scrollBy
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.fillMaxHeight
Expand Down Expand Up @@ -50,6 +51,7 @@ import kotlin.math.floor
@Composable
fun LazyColumnScrollbar(
listState: LazyListState,
modifier: Modifier = Modifier,
rightSide: Boolean = true,
alwaysShowScrollBar: Boolean = false,
thickness: Dp = 6.dp,
Expand All @@ -66,7 +68,7 @@ fun LazyColumnScrollbar(
content: @Composable () -> Unit
) {
if (!enabled) content()
else Box {
else Box(modifier = modifier) {
content()
InternalLazyColumnScrollbar(
listState = listState,
Expand Down Expand Up @@ -226,8 +228,8 @@ fun InternalLazyColumnScrollbar(
val offset = realFirstVisibleItem
?.size
?.let { it.toFloat() * remainder }
?.toInt() ?: 0
listState.scrollToItem(index = index, scrollOffset = offset)
?: 0f
listState.scrollBy(offset)
}
}

Expand Down
Loading

0 comments on commit 962c07b

Please sign in to comment.