首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >矩形无界波纹效应

矩形无界波纹效应
EN

Stack Overflow用户
提问于 2015-07-06 18:19:54
回答 1查看 942关注 0票数 6

我知道,我们可以通过设置背景属性的?android:attr/selectableItemBackgroundBorderless来获得视图的无界波纹效应。

我们也可以简单地使用我们自己的纹波图来定制颜色:

代码语言:javascript
复制
<!-- An unbounded blue ripple. --/>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/blue" />

结果是一个无界的圆圈,从中心波纹到拐角开始有波纹效应。

我试着用矩形而不是圆圈来构建相同的效果,但是我从来没有找到同样的效果。例如,我尝试使用掩码视图进行以下操作:

代码语言:javascript
复制
<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>

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

结果是一个矩形,而不是unbounded。它将被限制在视图边界(如文档中对掩码的解释),以及波纹效应是不同的(对我来说,在Android预览版中)

我想知道是否有任何解决方案,简单地构建矩形无界与默认无界波纹一样的波纹效应(正如我前面解释的)?

或者为了解决这个问题,我应该去一个自定义视图?

EN

回答 1

Stack Overflow用户

发布于 2022-06-16 05:17:31

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

  1. 通过为其附加层(内容和掩码)提供null,使波纹无界
  2. 增加热点区域,使圆周波纹超出视图的更大尺寸(宽度或高度)
  3. 在绘图前用矩形夹紧画布
代码语言:javascript
复制
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)
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31252932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档