You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发如何实现UI右上角黄色阴影样式的drawable可绘制资源

右上角黄色装饰实现方案

这类右上角的装饰样式两种实现方式都支持,更推荐用Android原生drawable实现,相比图片实现适配性更强、不会出现多分辨率下模糊的问题、占用的包体积也更小。

具体实现方案

方案1:XML drawable实现(无代码,适配性好)

在res/drawable目录下新建XML文件,通过LayerList嵌套旋转的矩形即可实现对应效果,示例代码如下:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:width="120dp"
        android:height="40dp"
        android:gravity="top|end"
        android:top="8dp"
        android:end="-36dp">
        <rotate android:fromDegrees="45">
            <shape android:shape="rectangle">
                <solid android:color="#FFC107" />
                <!-- 如果需要圆角可以加下面这行,调整半径即可 -->
                <corners android:radius="2dp"/>
            </shape>
        </rotate>
    </item>
</layer-list>

使用时直接把该drawable设置为父布局的背景,或者在布局右上角叠加一个ImageView加载该drawable即可,你可以自行调整代码里的宽高、偏移量、颜色、旋转角度匹配设计图的具体样式。

方案2:自定义Drawable/View实现(适合需要动态修改的场景)

如果后续需要动态调整装饰的颜色、形状、或者在装饰上添加文字信息,可以通过自定义Drawable重写绘制逻辑实现,核心代码示例如下(Kotlin):

import android.graphics.*
import android.graphics.drawable.Drawable

class CornerBadgeDrawable : Drawable() {
    private val paint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
        color = Color.parseColor("#FFC107")
        style = Paint.Style.FILL
        // 如果需要阴影可加如下配置
        setShadowLayer(8f, 0f, 2f, Color.parseColor("#33000000"))
    }
    private val path = Path()

    override fun draw(canvas: Canvas) {
        val viewWidth = bounds.width()
        // 自定义路径调整装饰形状,以下示例为右上角三角形斜角
        path.reset()
        path.moveTo(viewWidth - 110f, 0f)
        path.lineTo(viewWidth.toFloat(), 0f)
        path.lineTo(viewWidth.toFloat(), 110f)
        path.close()
        canvas.drawPath(path, paint)
    }

    override fun setAlpha(alpha: Int) {
        paint.alpha = alpha
    }

    override fun setColorFilter(colorFilter: ColorFilter?) {
        paint.colorFilter = colorFilter
    }

    override fun getOpacity(): Int = PixelFormat.TRANSLUCENT
}

图片实现注意事项

如果选择用图片实现,需要切出mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi共5套不同分辨率的资源,放到对应res/drawable-*的目录下,避免不同设备上加载出现拉伸模糊的问题。


内容的提问来源于stack exchange,提问作者Zeeshan Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:06:07