使用带有高程和角半径的流的Android约束布局
是否可以在不使用Cardview的情况下创建具有标高、拐角半径等的约束布局?使用带有高程和角半径的流的Android约束布局,android,android-layout,android-constraintlayout,android-cardview,android-elevation,Android,Android Layout,Android Constraintlayout,Android Cardview,Android Elevation,是否可以在不使用Cardview的情况下创建具有标高、拐角半径等的约束布局? Constraint layout有一个“constraintlayout.helper.widget.Flow”,它很好地打包了小部件,但不确定是否可以使其看起来类似于Cardview,Flow类继承自View类,因此您也可以在Flow中使用提升 没有类似于CardView的cornerRadius属性。但您可以创建一个圆形矩形作为可绘制的形状,并将其设置为流的背景 <shape xmlns:android=&
Constraint layout有一个“constraintlayout.helper.widget.Flow”,它很好地打包了小部件,但不确定是否可以使其看起来类似于Cardview,Flow类继承自View类,因此您也可以在Flow中使用提升 没有类似于CardView的cornerRadius属性。但您可以创建一个圆形矩形作为可绘制的形状,并将其设置为流的背景
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/light_image_background"/>
<corners android:radius="10dp"/>
</shape>
您将有一个圆形的背景,同时保持平面层次结构
另一种可能的解决方案是从Flow类扩展并覆盖onDraw,以便在背景中绘制圆角矩形。应该是这样的:
class RoundedFlow @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : Flow(context, attrs, defStyleAttr) {
private val backgroundRect : RectF = RectF(0f, 0f, 200f, 200f)
private val backgroundCornerRadius = 20f
private val backgroundPaint : Paint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
color = Color.YELLOW
}
override fun onDraw(canvas: Canvas?) {
backgroundRect.set(0f, 0f, measuredWidth.toFloat(), measuredHeight.toFloat())
canvas?.drawRoundRect(backgroundRect, backgroundCornerRadius , backgroundCornerRadius, backgroundPaint)
}
}
为什么不在CardView中使用ConstraintLayout呢?是的,我可以这样做,但是“ConstraintLayout.helper.widget.Flow”更像是一个线性布局。我发现使用4个流元素管理xml比使用4个CardView更容易,每个CardView都有一个约束布局。
class RoundedFlow @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : Flow(context, attrs, defStyleAttr) {
private val backgroundRect : RectF = RectF(0f, 0f, 200f, 200f)
private val backgroundCornerRadius = 20f
private val backgroundPaint : Paint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
color = Color.YELLOW
}
override fun onDraw(canvas: Canvas?) {
backgroundRect.set(0f, 0f, measuredWidth.toFloat(), measuredHeight.toFloat())
canvas?.drawRoundRect(backgroundRect, backgroundCornerRadius , backgroundCornerRadius, backgroundPaint)
}
}