java - 为自定义 View 提供阴影效果

标签 java android android-custom-view

您好,我正在开发一个应用程序,其中我有一个我在 ImageView 中使用的自定义曲线形状,现在这个 shpae 是白色的,我已经创建了另一个类似的黑色自定义形状,所以现在我正在尝试要做的是将黑色形状作为白色形状的阴影作为细黑线作为白色形状的轮廓。 现在我的问题是,当我运行应用程序时,黑色形状被白色形状完全覆盖。 所以请 f 任何人都可以在这里帮助我 我的xml代码

<android.support.v4.widget.NestedScrollView android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:fillViewport="true"
    android:fitsSystemWindows="true"
    android:id="@+id/profile_scroll"
    xmlns:android="http://schemas.android.com/apk/res/android" >
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <RelativeLayout
        android:id="@+id/background_image"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:background="@drawable/curved_toolbar"
        >

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="250dp"
            android:src="@drawable/curved_toolbar"
            android:visibility="gone" />
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="centerCrop"
            android:layout_marginBottom="20dp"
            android:src="@drawable/profile_black_shadow"/>
        <ImageView
            android:id="@+id/second_image"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="centerCrop"
            android:layout_marginBottom="20dp"
            android:src="@drawable/profile_second_image" />


        <ImageView
            android:id="@+id/pencil_image"
            android:layout_width="15dp"
            android:layout_height="15dp"
            android:layout_alignParentRight="true"
            android:layout_marginRight="30dp"
            android:scaleType="centerCrop"
            android:adjustViewBounds="true"
            android:layout_marginTop="25dp"
            android:src="@drawable/pencil" />


    </RelativeLayout>


    <LinearLayout
        android:id="@+id/linear"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">


    </LinearLayout>

    <de.hdodenhof.circleimageview.CircleImageView
        android:id="@+id/circle_image"
        android:layout_width="116dp"
        android:layout_height="120dp"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginEnd="125dp"
        android:layout_marginRight="125dp"
        android:layout_marginTop="113dp"
        android:src="@drawable/heath_ledger"
       />

    <LinearLayout
        android:id="@+id/person_name_layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_marginTop="10dp"
        android:layout_below="@+id/circle_image"
        android:layout_centerInParent="true"
        >
        <com.ct.listrtrial.Custom.CustomTextViewMedium
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="Jhon Doe"
            android:id="@+id/person_name_text"
            android:textColor="@color/White"
            android:textSize="16sp"/>
    </LinearLayout>
    <LinearLayout
        android:id="@+id/points_layout"
        android:layout_marginBottom="8dp"
        android:layout_below="@+id/person_name_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="6dp">
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_marginLeft="20dp">
           <com.ct.listrtrial.Custom.CustomTextViewMedium
               android:id="@+id/first_follow_count"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:text="200"
               android:textColor="@color/White"
               android:layout_marginLeft="13dp"
               android:textSize="15sp"/>
        <com.ct.listrtrial.Custom.CustomTextViewMedium
            android:id="@+id/first_follow_text"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:textSize="13sp"
            android:text="Followers"
            android:textColor="@color/White"
            android:layout_marginTop="5dp"/>
        </LinearLayout>
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_marginLeft="51dp">
            <com.ct.listrtrial.Custom.CustomTextViewMedium
                android:id="@+id/second_follow_count"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="200"
                android:layout_marginLeft="40dp"
                android:textColor="@color/White"
                android:textSize="15sp"/>
            <com.ct.listrtrial.Custom.CustomTextViewMedium
                android:id="@+id/second_follow_text"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:textSize="13sp"
                android:text="Following"
                android:textColor="@color/White"
               android:layout_marginLeft="25dp"
                android:layout_marginTop="5dp"/>
        </LinearLayout>
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_marginLeft="100dp">
            <com.ct.listrtrial.Custom.CustomTextViewMedium
                android:id="@+id/third_follow_count"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="1.5K"
                android:textColor="@color/White"
                android:textSize="15sp"/>
            <com.ct.listrtrial.Custom.CustomTextViewMedium
                android:id="@+id/third_follow_text"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:textSize="13sp"
                android:text="Points"
                android:textColor="@color/White"
                android:layout_marginTop="5dp"/>
        </LinearLayout>
    </LinearLayout>
    <View
        android:id="@+id/divider_view"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/black"
        android:layout_above="@+id/leaderboard_recycler"/>
    <android.support.v7.widget.RecyclerView
        android:id="@+id/leaderboard_recycler"
        android:layout_below="@+id/points_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
    </android.support.v7.widget.RecyclerView>
    <View
        android:id="@+id/divider_view1"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/black"
        android:layout_below="@+id/leaderboard_recycler"
        />
</RelativeLayout>
</android.support.v4.widget.NestedScrollView>

和我自定义的白色形状

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#FFFFFF"/>
    <size
        android:width="30dp"
        android:height="15dp"/>
    <corners
        android:bottomLeftRadius="20dp"
        android:bottomRightRadius="20dp"/>
</shape>

还有我的黑体

<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#000000"/>
    <size
        android:width="18dp"
        android:height="9.1dp"/>
    <corners
        android:bottomLeftRadius="55dp"
        android:bottomRightRadius="55dp"
        />
</shape>

最佳答案

尝试使用这个 drawable(您可以通过更改形状中的填充来调整阴影厚度),

喜欢:-

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:top="0px">
        <layer-list>
            <item android:top="4dp">
                <shape android:shape="rectangle">
                    <solid android:color="#08000000"/>
                    <corners
                        android:bottomLeftRadius="180dp"
                        android:bottomRightRadius="180dp" />
                    <size
                        android:width="80dp"
                        android:height="40dp"/>
                    <padding
                        android:bottom="3px" />
                </shape>
            </item>
            <item>
                <shape android:shape="rectangle">
                    <solid android:color="#09000000"/>
                    <corners
                        android:bottomLeftRadius="180dp"
                        android:bottomRightRadius="180dp" />
                    <size
                        android:width="80dp"
                        android:height="40dp"/>
                    <padding
                        android:bottom="2px"/>
                </shape>
            </item>
            <item>
                <shape android:shape="rectangle">
                    <solid android:color="#10000000"/>
                    <corners
                        android:bottomLeftRadius="180dp"
                        android:bottomRightRadius="180dp" />
                    <size
                        android:width="80dp"
                        android:height="40dp"/>
                    <padding
                        android:bottom="2px" />
                </shape>
            </item>
            <item>
                <shape android:shape="rectangle">
                    <solid android:color="#11000000"/>
                    <corners
                        android:bottomLeftRadius="180dp"
                        android:bottomRightRadius="180dp" />
                    <size
                        android:width="80dp"
                        android:height="40dp"/>
                    <padding
                        android:bottom="1px" />
                </shape>
            </item>
            <item>
                <shape android:shape="rectangle">
                    <solid android:color="#12000000"/>
                    <corners
                        android:bottomLeftRadius="180dp"
                        android:bottomRightRadius="180dp" />
                    <size
                        android:width="80dp"
                        android:height="40dp"/>
                    <padding
                        android:bottom="1px" />
                </shape>
            </item>
            <item>
                <shape android:shape="rectangle">
                    <solid android:color="#13000000"/>
                    <corners
                        android:bottomLeftRadius="180dp"
                        android:bottomRightRadius="180dp" />
                    <size
                        android:width="80dp"
                        android:height="40dp"/>
                    <padding
                        android:bottom="1px" />
                </shape>
            </item>
            <item>
                <shape android:shape="rectangle">
                    <solid android:color="#14000000"/>
                    <corners
                        android:bottomLeftRadius="180dp"
                        android:bottomRightRadius="180dp" />
                    <size
                        android:width="80dp"
                        android:height="40dp"/>
                    <padding
                        android:bottom="1px" />
                </shape>
            </item>
            <item>
                <shape android:shape="rectangle">
                    <solid android:color="#15000000"/>
                    <corners
                        android:bottomLeftRadius="180dp"
                        android:bottomRightRadius="180dp" />
                    <size
                        android:width="80dp"
                        android:height="40dp"/>
                    <padding
                        android:bottom="1px" />
                </shape>
            </item>
            <item>
                <shape android:shape="rectangle">
                    <solid android:color="#16000000"/>
                    <corners
                        android:bottomLeftRadius="180dp"
                        android:bottomRightRadius="180dp" />
                    <size
                        android:width="80dp"
                        android:height="40dp"/>
                    <padding
                        android:bottom="1px" />
                </shape>
            </item>
            <item>
                <shape android:shape="rectangle">
                    <solid android:color="#17000000"/>
                    <corners
                        android:bottomLeftRadius="180dp"
                        android:bottomRightRadius="180dp" />
                    <size
                        android:width="80dp"
                        android:height="40dp"/>
                    <padding
                        android:bottom="1px" />
                </shape>
            </item>
        </layer-list>
    </item>
    <item >
        <shape android:shape="rectangle">
            <solid android:color="#ffffff"/>
            <corners
                android:bottomLeftRadius="180dp"
                android:bottomRightRadius="180dp" />
            <size
                android:width="80dp"
                android:height="40dp"/>
        </shape>
    </item>
</layer-list>

像在 ImageView 上设置:-

<ImageView
        android:background="@drawable/shape"
        android:layout_width="match_parent"
        android:layout_height="200dp" />

结果:-

enter image description here

关于java - 为自定义 View 提供阴影效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50187787/

相关文章:

java - 属性文件中资源的 Spring Boot 引用文件位置

java - 返回java中循环中存在的值

Java图形随机文本

android - 添加精美按钮并出现此错误后,无法更改应用程序图标

android - 尝试膨胀自定义 View 时出现 stackoverflow 错误

java - Android Studio - 单击图像按钮后崩溃

java - 我的 BLE GATT 服务应用程序不断崩溃

android - 圆形背景 android UI 中的图标图像

android - 将自定义 View 与屏幕底部对齐

android - 如何更改自定义适配器中按钮单击时的按钮文本