lihangleo2 / ShadowLayout

可定制化阴影的万能阴影布局ShadowLayout 3.0 震撼上线。效果赶超CardView。阴影支持x,y轴偏移,支持阴影扩散程度,支持阴影圆角,支持单边或多边不显示阴影;控件支持动态设置shape和selector(项目里再也不用画shape了);支持随意更改颜色值,支持随意更改颜色值,支持随意更改颜色值。重要的事情说三遍
MIT License
3.46k stars 401 forks source link

使用ShadowLayout的圆角,圆角边缘有锯齿,有没有解决方法 #92

Closed muyi911 closed 2 years ago

lihangleo2 commented 3 years ago

我不知道你为什么会有锯齿。能否截图发我看下。另外下载本项目demo里,里面的所有效果我都罗列了一遍。看是否有锯齿。此issue 保留周五前。请尽快回复。非常感谢你的支持

muyi911 commented 3 years ago

第一张图使用app:hl_layoutBackground属性,圆角是光滑的

 <com.lihang.ShadowLayout
        android:layout_marginBottom="10dp"
        android:layout_width="328dp"
        android:layout_height="208dp"
        app:hl_layoutBackground="@drawable/my_bg_1"
        app:hl_cornerRadius="24dp"
        app:hl_shadowColor="#0d000000"
        app:hl_shadowHiddenTop="true"
        app:hl_shadowLimit="9dp"
        app:hl_shadowOffsetY="5dp">
</com.lihang.ShadowLayout>

第二张图,我是将图片放在了ShadowLayout内部,因为我想让整个区域有阴影,这样就出现了锯齿

<RelativeLayout
            android:layout_width="328dp"
            android:layout_height="208dp"
            android:clipChildren="true"
            android:gravity="center_horizontal"
            android:orientation="vertical">

            <ImageView
                android:id="@+id/my_bg"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:scaleType="centerCrop"
                android:src="@drawable/my_bg_1" />
</com.lihang.ShadowLayout>

image

lihangleo2 commented 3 years ago

好的,感谢你的支持

lihangleo2 commented 3 years ago

如果想要通过第一种方式解决,那么只要随便添加个子view就可以解决了。因为阴影需要一个控件的background。然后设置的图片也需要一个控件的background。 8B2F7022D97C9C21946907F19F4765B5 代码如下:

        <com.lihang.ShadowLayout
            android:id="@+id/shadowLayout"
            android:layout_width="328dp"
            android:layout_height="208dp"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="20dp"
            app:hl_cornerRadius="24dp"
            app:hl_layoutBackground="@mipmap/fish"
            app:hl_shadowColor="#F2FF0000"
            app:hl_shadowLimit="20dp">

            <!-- 需要一个子view-->
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center"
                />

        </com.lihang.ShadowLayout>

第二个确实有抗锯齿,解决好会在这通知你。感谢你的支持!

lihangleo2 commented 3 years ago

查阅大量资料没有一种方法能完美,替代clipPath()的方案!!

wangshanhai commented 3 years ago

image 我也遇到这种情况

xiaoxing1992 commented 3 years ago

我也遇到这种情况

ldpGitHub commented 3 years ago

办法是有的,照着边缘再画一条线盖掉锯齿,比如你背景是白的,你就画一条白线

lihangleo2 commented 3 years ago

办法是有的,照着边缘再画一条线盖掉锯齿,比如你背景是白的,你就画一条白线

这样治标不治本,如果遇到不同的背景的话,那条线怎么画。如果是渐变色背景。根本就很鸡肋

lihangleo2 commented 3 years ago

大家遇到这种情况,先使用我上面的解决方法解决。PorterDuff我也试过了。但是效果。也不是很理想。我会抓紧解决的。有治本的同学。希望一起解决。

chengfan2017 commented 3 years ago

还是有这个问题,第一种办法不适用网络图片

lihangleo2 commented 3 years ago

还是有这个问题,第一种办法不适用网络图片

怎么会不使用网络图片呢,你直接把TextView改成ImageView不就好了。 和正常的imageView一样加载图片的。

lihangleo2 commented 3 years ago

在这里再讲一下。遇到这个问题。可以子View用imageView去加载圆角图片,shadowLayout保持同一个圆角,可以完美解决的。这里因为是阴影控件,需要剪裁子view系统clipPath本身存在抗锯齿问题。其他第三方imageView可以设置不同圆角且圆滑,是用了PorterDuff。而我这里,这种方案根本不适合。这里是剪裁子view,不是图片

lihangleo2 commented 2 years ago

再用到这个功能的时候大家用app:hl_layoutBackground属性。上面有提到