【问题标题】:Possible bug with shadow layer?阴影层可能存在错误?
【发布时间】:2013-09-03 04:15:18
【问题描述】:

我正在尝试使用以下代码在椭圆周围实现阴影:

shadow = new Paint();
    shadow.setColor(Color.YELLOW);
    shadow.setShadowLayer(10, 0, 0, Color.YELLOW);

绘制函数是这样的:

c.drawOval(ovalRect, shadow);
super.draw(c); //Draws bitmap

所以首先它用包含阴影的颜料画出椭圆形,然后在它上面画出透明的位图(位图没有任何颜料)。

我得到以下结果: 如您所见,阴影并没有沿着椭圆展开,而是被切掉了,是什么导致了这种行为?

【问题讨论】:

  • 可能是填充问题?
  • 如果你的 3 芯片(标签、面板、idk)上的东西太小了。阴影适合它,因此您必须使面板、标签或您使用的东西更大,以便阴影适合
  • 我可以理解,如果阴影只被相邻的按钮剪掉了,但是在这里我们可以看到它也是从顶部剪掉的。
  • 在使用带有阴影的 textview 时,我得到了类似的结果。我通过添加填充来修复它

标签: java android bitmap android-canvas draw


【解决方案1】:

游戏迟到了,但仍可能对某人有所帮助:

尝试将android:clipChildren="false" 设置为父视图组。

根据您的布局,您可能还需要向 父级 额外添加一些填充,并在该父级上设置 android:clipToPadding="false"

这通常允许孩子(以及他们的影子)在他们的边界之外绘制。

【讨论】:

    【解决方案2】:

    你可以通过改变半径来试试这个:

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <!-- Drop Shadow Stack -->
        <item>
            <shape>
                <corners android:radius="12dp" />
    
                <padding
                    android:bottom="1dp"
                    android:left="1dp"
                    android:right="1dp"
                    android:top="1dp" />
    
                <solid android:color="#00CCCCCC" />
            </shape>
        </item>
        <item>
            <shape>
                <corners android:radius="12dp" />
    
                <padding
                    android:bottom="1dp"
                    android:left="1dp"
                    android:right="1dp"
                    android:top="1dp" />
    
                <solid android:color="#10CCCCCC" />
            </shape>
        </item>
        <item>
            <shape>
                <corners android:radius="12dp" />
    
                <padding
                    android:bottom="1dp"
                    android:left="1dp"
                    android:right="1dp"
                    android:top="1dp" />
    
                <solid android:color="#20CCCCCC" />
            </shape>
        </item>
        <item>
            <shape>
                <corners android:radius="12dp" />
    
                <padding
                    android:bottom="1dp"
                    android:left="1dp"
                    android:right="1dp"
                    android:top="1dp" />
    
                <solid android:color="#30CCCCCC" />
            </shape>
        </item>
        <item>
            <shape>
                <corners android:radius="12dp" />
    
                <padding
                    android:bottom="1dp"
                    android:left="1dp"
                    android:right="1dp"
                    android:top="1dp" />
    
                <solid android:color="#50CCCCCC" />
            </shape>
        </item>
    
        <!-- Background -->
        <item>
            <shape>
                <solid android:color="@android:color/white" />
    
                <corners android:radius="12dp" />
            </shape>
        </item>
    
    </layer-list>
    

    【讨论】:

    • 我正在使用自定义视图类,这无济于事
    • 你使用 ImageView 吗?还是只是油漆?
    • 我将视图子类化并使用 canvas.drawBitmap() 处理图像,使用 canvas.drawOval() 处理带阴影的椭圆
    • 感谢最后一个链接完成了这项工作!
    猜你喜欢
    • 2013-06-11
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 2017-07-31
    • 2011-04-02
    • 2016-06-14
    • 2011-02-25
    • 2014-02-09
    相关资源
    最近更新 更多