Android打造带阴影的气泡

前言

在做Android项目的时候,我们的射鸡师常常会使用阴影,Android实现阴影目前主流有以下几种方式:
1)使用.9文件
2)使用 layer-list
3)使用 elevation,translationZ
4)使用自定义View 和自定义ViewGrop
本文综合考虑之后,考虑使用的是第二种方式layer-list实现以下小气泡效果:


image.png
  • 气泡由两个部分组成,三角形和圆角的框


    无标题.png
  1. 三角形带阴影实现
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <rotate
            android:fromDegrees="45"
            android:pivotX="81%"
            android:pivotY="131%">
            <shape android:shape="rectangle">
                <size
                    android:width="10dp"
                    android:height="10dp" />
                <solid android:color="#0DCCCCCC" />
            </shape>
        </rotate>
    </item>
    <item>
        <rotate
            android:fromDegrees="45"
            android:pivotX="84%"
            android:pivotY="134%">
            <shape android:shape="rectangle">
                <size
                    android:width="10dp"
                    android:height="10dp" />
                <solid android:color="#10CCCCCC" />
            </shape>
        </rotate>
    </item>
    <item>
        <rotate
            android:fromDegrees="45"
            android:pivotX="87%"
            android:pivotY="137%">
            <shape android:shape="rectangle">
                <size
                    android:width="10dp"
                    android:height="10dp" />
                <solid android:color="#15CCCCCC" />
            </shape>
        </rotate>
    </item>
    <item>
        <rotate
            android:fromDegrees="45"
            android:pivotX="90%"
            android:pivotY="140%">
            <shape android:shape="rectangle">
                <size
                    android:width="10dp"
                    android:height="10dp" />
                <solid android:color="#20CCCCCC" />
            </shape>
        </rotate>
    </item>
    <item>
        <rotate
            android:fromDegrees="45"
            android:pivotX="93%"
            android:pivotY="143%">
            <shape android:shape="rectangle">
                <size
                    android:width="10dp"
                    android:height="10dp" />
                <solid android:color="@color/white" />
            </shape>
        </rotate>
    </item>
</layer-list>
image.png

2.圆角带阴影的框

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <padding
                android:bottom="1dp"
                android:left="1dp"
                android:right="1dp"
                android:top="1dp" />
            <solid android:color="#0DCCCCCC" />
            <corners android:radius="10dp" />
        </shape>
    </item>
    <item>
        <shape android:shape="rectangle">
            <padding
                android:bottom="1dp"
                android:left="1dp"
                android:right="1dp"
                android:top="1dp" />
            <solid android:color="#10CCCCCC" />
            <corners android:radius="10dp" />
        </shape>
    </item>
    <item>
        <shape android:shape="rectangle">
            <padding
                android:bottom="1dp"
                android:left="1dp"
                android:right="1dp"
                android:top="1dp" />
            <solid android:color="#15CCCCCC" />
            <corners android:radius="10dp" />
        </shape>
    </item>
    <item>
        <shape android:shape="rectangle">
            <padding
                android:bottom="1dp"
                android:left="1dp"
                android:right="1dp"
                android:top="1dp" />
            <solid android:color="#20CCCCCC" />
            <corners android:radius="10dp" />
        </shape>
    </item>
    <item>
        <shape>
            <solid android:color="#FFFFFF" />
            <corners android:radius="6dp" />
        </shape>
    </item>
</layer-list>

image.png

0DCCCCCC,前面两位0D是颜色的透明度,详情可以查看博友的文章:https://www.jianshu.com/p/6102163af554
3.两部分组合

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="true">

    <LinearLayout
        android:id="@+id/roundLinearLayout2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="9dp"
        android:orientation="horizontal"
        android:background="@drawable/msg_gradual_round"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <TextView
            android:id="@+id/textView4"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="15dp"
            android:layout_marginTop="14dp"
            android:layout_marginRight="12dp"
            android:layout_marginBottom="15dp"
            android:layout_weight="1"
            android:text="6666666666666666666666666666666666666666666666666666666"
            android:textColor="#000000"
            android:textSize="14sp" />

        <ImageView
            android:id="@+id/iv_close"
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:padding="3dp"
            android:layout_marginTop="11dp"
            android:layout_marginRight="11dp"
            android:src="@mipmap/icon_guide_cha" />

    </LinearLayout>

    <View
        android:layout_width="13dp"
        android:layout_height="13dp"
        android:layout_marginTop="18dp"
        android:background="@drawable/msg_left_triangle"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@+id/roundLinearLayout2" />

</android.support.constraint.ConstraintLayout>
image.png

就这样ok啦。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。