android - 如何在android中创建s曲线布局
问题描述
如何创建布局或视图,如附加图像、可用于 ImageView、Slider 等的形状。
解决方案
你可以使用类似的东西。
<FrameLayout
android:clipChildren="false"
android:clipToPadding="false"
...>
<ImageView/>
<com.google.android.material.card.MaterialCardView
android:id="@+id/card"
android:layout_marginTop="xxdp"
app:cardCornerRadius="48dp"
app:cardBackgroundColor="@color/colorSecondaryLight"
.../>
</FrameLayout>
然后应用ShapeAppearanceModel
:
val cardView = findViewById<MaterialCardView>(R.id.card)
cardView.shapeAppearanceModel = cardView.shapeAppearanceModel.toBuilder()
.setTopLeftCorner(CustomCornerTreatment())
.setBottomLeftCorner(CornerFamily.ROUNDED, 0f)
.setBottomRightCorner(CornerFamily.ROUNDED, 0f)
.build()
有这样的习惯CornerTreatment
:
class CustomCornerTreatment : CornerTreatment() {
override fun getCornerPath(
shapePath: ShapePath,
angle: Float,
interpolation: Float,
radius: Float
) {
val interpolatedRadius = radius * interpolation
shapePath.reset(0f, -radius * interpolation, 270f,270 -angle)
shapePath.addArc(
0f,
-2*interpolatedRadius,
2*interpolatedRadius,
0f,
180f,
- angle)
}
}
推荐阅读
- javascript - 有什么方法可以替换 vaadin 14 的 window.open 以重定向到外部 url?
- java - 如何在 Spring JPA Restful Service 中搜索数据
- c# - 将对象名称中带有日期的 JSON 映射到 C# 对象
- mysql - React 项目的免费服务器销售
- javascript - 点击一次后更改功能码
- python-2.7 - 无法导入为在 Robot Framework 中创建 excel 工作表而创建的 .py 文件
- babylonjs - 如何在 Babylon.js 中获取碰撞的位置?
- java - 将 .wav 和 .png/.jpg 文件添加到 GUI
- javascript - 与扩展语法相关的奇怪语法
- c# - 如何将json字符串转换为methodinfo参数?