|
import android.annotation.SuppressLint |
|
import android.content.Context |
|
import android.graphics.Paint |
|
import android.util.AttributeSet |
|
import androidx.core.content.ContextCompat |
|
import com.google.android.material.bottomappbar.BottomAppBarTopEdgeTreatment |
|
import com.google.android.material.bottomnavigation.BottomNavigationView |
|
import com.google.android.material.floatingactionbutton.FloatingActionButton |
|
import com.google.android.material.shape.CornerFamily |
|
import com.google.android.material.shape.MaterialShapeDrawable |
|
import com.google.android.material.shape.ShapeAppearanceModel |
|
|
|
@SuppressLint("RestrictedApi") |
|
class FabBottomNavigationView @JvmOverloads constructor( |
|
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 |
|
) : BottomNavigationView(context, attrs, defStyleAttr) { |
|
|
|
private var topCurvedEdgeTreatment: BottomAppBarTopEdgeTreatment |
|
private var materialShapeDrawable: MaterialShapeDrawable |
|
private var fabSize = 0F |
|
var fabCradleMargin = 0F |
|
var fabCradleRoundedCornerRadius = 0F |
|
var topCornerRadius = 0F |
|
var cradleVerticalOffset = 0F |
|
|
|
init { |
|
val ta = |
|
context.theme.obtainStyledAttributes(attrs, R.styleable.FabBottomNavigationView, 0, 0) |
|
fabSize = ta.getDimension(R.styleable.FabBottomNavigationView_fab_size, 0F) |
|
fabCradleMargin = ta.getDimension(R.styleable.FabBottomNavigationView_fab_cradle_margin, 0F) |
|
fabCradleRoundedCornerRadius = |
|
ta.getDimension( |
|
R.styleable.FabBottomNavigationView_fab_cradle_rounded_corner_radius, |
|
0F |
|
) |
|
topCornerRadius = ta.getDimension(R.styleable.FabBottomNavigationView_top_corner_radius, 0F) |
|
cradleVerticalOffset = |
|
ta.getDimension(R.styleable.FabBottomNavigationView_cradle_vertical_offset, 0F) |
|
|
|
topCurvedEdgeTreatment = BottomAppBarTopEdgeTreatment( |
|
fabCradleMargin, |
|
fabCradleRoundedCornerRadius, |
|
cradleVerticalOffset |
|
).apply { |
|
fabDiameter = fabSize |
|
} |
|
|
|
val shapeAppearanceModel = ShapeAppearanceModel.Builder() |
|
.setTopEdge(topCurvedEdgeTreatment) |
|
.setTopLeftCorner(CornerFamily.ROUNDED, topCornerRadius) |
|
.setTopRightCorner(CornerFamily.ROUNDED, topCornerRadius) |
|
.build() |
|
|
|
materialShapeDrawable = MaterialShapeDrawable(shapeAppearanceModel).apply { |
|
setTint(ContextCompat.getColor(context, R.color.navigation_tint)) |
|
paintStyle = Paint.Style.FILL_AND_STROKE |
|
} |
|
|
|
background = materialShapeDrawable |
|
} |
|
|
|
} |