gpt4 book ai didi

android - 矩形无界波纹效果

转载 作者:行者123 更新时间:2023-12-04 23:43:12 26 4
gpt4 key购买 nike

我知道我们可以简单地通过设置 ?android:attr/selectableItemBackgroundBorderless对于背景属性,获得 View 的无限涟漪效果。

我们也可以简单地拥有自己的可绘制波纹来自定义颜色:

<!-- An unbounded blue ripple. --/>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/blue" />

结果是一个从中心波纹到角落的具有波纹效果的无界圆圈。

我尝试用矩形而不是圆形来构建相同的效果,但我永远找不到相同的效果。例如,我尝试使用掩码 View 进行以下操作:
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?android:colorControlHighlight">
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<solid android:color="?android:colorAccent" />
</shape>
</item>
</ripple>

更多 sample : http://blog.stylingandroid.com/ripples-part-3/

结果是一个矩形,但不是 unbounded .它将绑定(bind)到 View 边界(如文档中的掩码所述)
以及涟漪效应不同(对我来说在 Android-M 预览版中)

我想知道是否有任何解决方案可以简单地构建具有与默认无界波纹相同的波纹效果的矩形无界(如上所述)?

或者为了解决我应该使用自定义 View 的问题?

最佳答案

xml似乎无法实现。但是,它可以从代码中实现:

  • 通过提供 null 使涟漪无界用于其附加层(内容和掩码)
  • 增加热点区域,使圆形波纹超出 View 的较大尺寸(宽度或高度)
  • 绘制前用矩形裁剪 Canvas
  • fun View.setSelectableItemBackgroundBorderlessRectangle(
    @Px left: Int = 0,
    @Px top: Int = 0,
    @Px right: Int = 0,
    @Px bottom: Int = 0,
    ) {
    doOnLayout { view ->
    val bounds = Rect(-left, -top, view.width + right, view.height + bottom)

    background = object : RippleDrawable(
    ColorStateList.valueOf(getColorFromAttr(android.R.attr.colorControlHighlight)),
    null,
    null
    ) {
    override fun draw(canvas: Canvas) {
    canvas.clipRect(bounds)
    super.draw(canvas)
    }
    }.apply {
    setHotspotBounds(bounds.left, bounds.top, bounds.right, bounds.bottom)
    }
    }
    }

    关于android - 矩形无界波纹效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31252932/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com