【问题标题】:How to create a rounded corner mask as a drawable?如何将圆角蒙版创建为可绘制对象?
【发布时间】:2018-10-27 17:19:19
【问题描述】:

需要在android中对几个小部件进行圆角,但是将背景更改为drawable是没有解决方案的。

因此,我想创建一个可以放置在任何 ui 元素之上的可绘制对象。看看这张图片;我需要黑色部分是透明的,白色部分是实心的。

我只知道如何创建负(圆角矩形)形状:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">


    <solid
        android:color="@color/colorForegroundTable"
        />

   <corners android:radius="10dp" />

    <padding
        android:left="20dp"
        android:top="10dp"
        android:right="20dp"
        android:bottom="10dp"    >
    </padding>

</shape>

有什么想法吗?

【问题讨论】:

    标签: android android-drawable


    【解决方案1】:

    https://stackoverflow.com/a/64464686/505152的答案可以帮到你,你可以给视图设置一个剪裁边框,效果很好:

    fun setCorners() {
    
        val mOutlineProvider = object : ViewOutlineProvider() {
            override fun getOutline(view: View, outline: Outline) {
    
                val left = 0
                val top = 0
                val right = view.width
                val bottom = view.height
                val cornerRadiusDP = 16f
                val cornerRadius = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, cornerRadiusDP, resources.displayMetrics).toInt()
    
                // all corners
                outline.setRoundRect(left, top, right, bottom, cornerRadius.toFloat())
            }
        }
    
        binding.linearlayoutSidebar.apply {
            outlineProvider = mOutlineProvider
            clipToOutline = true
        }
    }
    

    来自:

    到:

    【讨论】:

      【解决方案2】:

      你可以制作一个有角的 9-patch 图像并使用该可绘制对象。

      【讨论】:

      • 可以工作,我不知道为什么它的上帝差票。唯一的缺点是您需要为每个分辨率创建 9-patch。
      【解决方案3】:

      您可以使用图层列表来遮盖形状

      <layer-list>
      
      <item>
          <shape android:shape="rectangle">
             <solid android:color="@android:color/white"/>
          </shape>
      </item>
      
      <item>
        <shape android:shape="rectangle">
            <solid android:color="@android:color/black"/>
            <corners android:radius="50dp"/>
        </shape>
      </item>
      </layer-list>
      

      【讨论】:

      • 谢谢,但我需要黑色部分是透明的。我该怎么做?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-25
      • 2014-03-27
      • 1970-01-01
      • 2015-03-17
      • 1970-01-01
      相关资源
      最近更新 更多