commit
2351cce332
|
|
@ -0,0 +1 @@
|
|||
/build
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
apply from: "../android-configs/lib-config.gradle"
|
||||
apply plugin: 'kotlin-android'
|
||||
|
||||
dependencies {
|
||||
implementation project(":utils")
|
||||
implementation project(":kotlin-extensions")
|
||||
|
||||
implementation "com.google.android.material:material"
|
||||
implementation "androidx.core:core-ktx"
|
||||
|
||||
constraints {
|
||||
implementation("com.google.android.material:material") {
|
||||
version {
|
||||
require '1.0.0'
|
||||
}
|
||||
}
|
||||
implementation("androidx.core:core-ktx") {
|
||||
version {
|
||||
require '1.3.1'
|
||||
}
|
||||
}
|
||||
implementation("org.jetbrains.kotlin:kotlin-stdlib") {
|
||||
version {
|
||||
require '1.3.0'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
<manifest package="ru.touchin.roboswag.recyclerview_decorators"/>
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
package ru.touchin.roboswag.recyclerview_decorators.decorators
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Rect
|
||||
import android.view.View
|
||||
import androidx.annotation.DrawableRes
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
|
||||
open class BottomDividerItemDecoration(
|
||||
context: Context,
|
||||
@DrawableRes drawableId: Int? = null,
|
||||
override val predicate: ((position: Int) -> Boolean) = { true },
|
||||
override val startMargin: Int = 0,
|
||||
override val endMargin: Int = 0,
|
||||
override val offset: Boolean = true,
|
||||
override val showOnLastItem: Boolean = false
|
||||
) : DividerItemDecoration(context, drawableId, predicate, startMargin, endMargin, offset, showOnLastItem) {
|
||||
|
||||
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
|
||||
val position = parent.getChildAdapterPosition(view)
|
||||
if (offset && predicate(position) && (position != state.itemCount - 1 || showOnLastItem)) {
|
||||
outRect.set(0, 0, 0, divider.intrinsicHeight)
|
||||
}
|
||||
}
|
||||
|
||||
override fun getDividerTop(child: View): Int = getDividerBottom(child) - divider.intrinsicHeight
|
||||
|
||||
override fun getDividerBottom(child: View): Int = bounds.bottom + child.translationY.toInt()
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
package ru.touchin.roboswag.recyclerview_decorators.decorators
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Canvas
|
||||
import android.graphics.Rect
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.view.View
|
||||
import androidx.annotation.DrawableRes
|
||||
import androidx.core.content.res.getDrawableOrThrow
|
||||
import androidx.core.view.children
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import ru.touchin.roboswag.components.utils.px
|
||||
|
||||
abstract class DividerItemDecoration(
|
||||
context: Context,
|
||||
@DrawableRes drawableId: Int? = null,
|
||||
protected open val predicate: ((position: Int) -> Boolean) = { true },
|
||||
protected open val startMargin: Int = 0,
|
||||
protected open val endMargin: Int = 0,
|
||||
protected open val offset: Boolean = true,
|
||||
protected open val showOnLastItem: Boolean = false
|
||||
) : RecyclerView.ItemDecoration() {
|
||||
|
||||
protected val bounds = Rect()
|
||||
protected val divider: Drawable
|
||||
|
||||
init {
|
||||
if (drawableId == null) {
|
||||
context.obtainStyledAttributes(intArrayOf(android.R.attr.listDivider)).apply {
|
||||
divider = getDrawableOrThrow(0)
|
||||
recycle()
|
||||
}
|
||||
} else {
|
||||
divider = context.getDrawable(drawableId)!!
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDraw(canvas: Canvas, parent: RecyclerView, state: RecyclerView.State) {
|
||||
if (offset) {
|
||||
drawDivider(canvas, parent, state)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDrawOver(canvas: Canvas, parent: RecyclerView, state: RecyclerView.State) {
|
||||
if (!offset) {
|
||||
drawDivider(canvas, parent, state)
|
||||
}
|
||||
}
|
||||
|
||||
private fun drawDivider(canvas: Canvas, parent: RecyclerView, state: RecyclerView.State) {
|
||||
canvas.save()
|
||||
parent.children.forEach { child ->
|
||||
val position = parent.getChildAdapterPosition(child)
|
||||
if (predicate(position) && (position != state.itemCount - 1 || showOnLastItem)) {
|
||||
parent.getDecoratedBoundsWithMargins(child, bounds)
|
||||
val top = getDividerTop(child)
|
||||
val bottom = getDividerBottom(child)
|
||||
divider.setBounds(
|
||||
bounds.left + startMargin,
|
||||
top,
|
||||
bounds.right - (endMargin.toFloat().px).toInt(),
|
||||
bottom
|
||||
)
|
||||
divider.draw(canvas)
|
||||
}
|
||||
}
|
||||
canvas.restore()
|
||||
}
|
||||
|
||||
abstract fun getDividerTop(child: View): Int
|
||||
|
||||
abstract fun getDividerBottom(child: View): Int
|
||||
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package ru.touchin.roboswag.recyclerview_adapters.decorators
|
||||
package ru.touchin.roboswag.recyclerview_decorators.decorators
|
||||
|
||||
import android.graphics.Canvas
|
||||
import android.graphics.Rect
|
||||
|
|
@ -1,2 +1,2 @@
|
|||
<manifest
|
||||
package="ru.touchin.roboswag.components.views"/>
|
||||
package="ru.touchin.roboswag.views"/>
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@ import android.util.AttributeSet;
|
|||
import android.util.TypedValue;
|
||||
|
||||
import ru.touchin.roboswag.components.utils.UiUtils;
|
||||
import ru.touchin.roboswag.components.views.R;
|
||||
|
||||
/**
|
||||
* Created by Ilia Kurtov on 07/12/2016.
|
||||
|
|
|
|||
|
|
@ -40,8 +40,8 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
|
||||
import ru.touchin.defaults.DefaultTextWatcher;
|
||||
import ru.touchin.roboswag.components.views.BuildConfig;
|
||||
import ru.touchin.roboswag.components.views.R;
|
||||
import ru.touchin.roboswag.views.BuildConfig;
|
||||
import ru.touchin.roboswag.views.R;
|
||||
import ru.touchin.roboswag.views.internal.AttributesUtils;
|
||||
import ru.touchin.roboswag.core.log.Lc;
|
||||
|
||||
|
|
|
|||
|
|
@ -34,8 +34,8 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
|
||||
import ru.touchin.roboswag.components.utils.UiUtils;
|
||||
import ru.touchin.roboswag.components.views.BuildConfig;
|
||||
import ru.touchin.roboswag.components.views.R;
|
||||
import ru.touchin.roboswag.views.BuildConfig;
|
||||
import ru.touchin.roboswag.views.R;
|
||||
import ru.touchin.roboswag.views.internal.AttributesUtils;
|
||||
import ru.touchin.roboswag.core.log.Lc;
|
||||
|
||||
|
|
|
|||
|
|
@ -6,8 +6,8 @@ import android.view.LayoutInflater
|
|||
import androidx.core.content.withStyledAttributes
|
||||
import ru.touchin.extensions.observable
|
||||
import ru.touchin.extensions.setOnRippleClickListener
|
||||
import ru.touchin.roboswag.components.views.R
|
||||
import ru.touchin.roboswag.components.views.databinding.ProgressViewBinding
|
||||
import ru.touchin.roboswag.views.databinding.ProgressViewBinding
|
||||
import ru.touchin.roboswag.views.R
|
||||
import kotlin.properties.Delegates
|
||||
|
||||
//TODO make customizable views list and views style
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ import androidx.annotation.IdRes;
|
|||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import ru.touchin.roboswag.components.views.R;
|
||||
import ru.touchin.roboswag.views.R;
|
||||
|
||||
public class Switcher extends FrameLayout {
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue