我想<RelativeLayout>
为Android创建一个阴影框,如下图所示:
影子框可绘制对象将在其<gradient>
内部创建,如下所示:
我正在努力,因为我正在尝试以梯形形状进行操作,<RelativeLayout>
以使其在屏幕上站立时可以看到。
这是我的代码:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:background="#fff"
tools:context=".LoginActivity">
<RelativeLayout
android:id="@+id/myRectangleView"
android:layout_width="354dp"
android:layout_height="239dp"
android:layout_marginStart="30.5dp"
android:layout_marginLeft="30.5dp"
android:layout_marginTop="84dp"
android:background="@drawable/my_drawable"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginStart="15dp"
android:layout_marginLeft="15dp"
android:layout_marginTop="15dp"
android:contentDescription="avatar"
app:srcCompat="@mipmap/ic_launcher_round" />
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<?xml version="1.0" encoding="UTF-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- image shadow below can be use just fine-->
<item
android:drawable="@drawable/image_shadow">
</item>
<!-- drawn shadow below is what I want it to be trapezoidal shape -->
<!-- right now it's a triangle, and I unsuccessfully tried to overlap it so it'd become trapezoid -->
<item
android:drawable="@drawable/drawn_shadow">
</item>
<item
android:top="0dp"
android:bottom="0dp">
<shape
android:shape="rectangle">
<solid
android:color="#d1d1d1"/>
<stroke
android:width="0.01dp"
android:color="#9c9c9c"/>
<corners android:bottomRightRadius="10dp"
android:bottomLeftRadius="10dp"
android:topLeftRadius="0dp"
android:topRightRadius="0dp"/>
</shape>
</item>
<item
android:top="0dp"
android:bottom="2dp">
<shape
android:shape="rectangle">
<solid
android:color="#d1d1d1"/>
<stroke
android:width="0.01dp"
android:color="#9c9c9c"/>
<corners android:bottomRightRadius="10dp"
android:bottomLeftRadius="10dp"
android:topLeftRadius="0dp"
android:topRightRadius="0dp"/>
</shape>
</item>
<item
android:top="0dp"
android:bottom="4dp">
<shape
android:shape="rectangle">
<gradient
android:angle="90"
android:endColor="#564DA1"
android:centerColor="#463894"
android:startColor="#2D216F"
android:centerY="0.75"
android:type="linear" />
<corners android:bottomRightRadius="10dp"
android:bottomLeftRadius="10dp"
android:topLeftRadius="0dp"
android:topRightRadius="0dp"/>
</shape>
</item>
<item
android:top="0dp"
android:bottom="157.5dp">
<shape>
<gradient
android:startColor="#564DA1"
android:centerColor="#e8e8e8"
android:endColor="#564DA1"
android:type="linear"
android:centerY="0.75"
android:angle="90"/>
</shape>
</item>
<item
android:top="125dp"
android:bottom="4dp">
<shape>
<gradient
android:startColor="#574EA4"
android:centerColor="#574EA4"
android:endColor="#574EA4"
android:type="linear"
android:centerY="0.75"
android:angle="90"/>
<corners android:bottomRightRadius="10dp"
android:bottomLeftRadius="10dp"
android:topLeftRadius="0dp"
android:topRightRadius="0dp"/>
</shape>
</item>
</layer-list>
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item >
<rotate
android:fromDegrees="45"
android:toDegrees="-45"
android:pivotX="15%"
android:pivotY="-36%" >
<shape
android:shape="rectangle" >
<padding
android:bottom="50dp"
android:left="0dp"
android:right="0dp"
android:top="0dp" />
<gradient
android:angle="225"
android:endColor="@android:color/transparent"
android:centerColor="@android:color/transparent"
android:startColor="#999999"
android:centerY="0.1"
android:type="linear" />
</shape>
</rotate>
</item>
</layer-list>
主Xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:background="#23FFC1"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="300dp"
android:layout_height="450dp"
android:layout_margin="0dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
>
<ImageView
android:layout_width="300dp"
android:layout_height="400dp"
android:src="@drawable/box"/>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="300dp"
android:layout_height="50dp"
app:srcCompat="@drawable/shadow"
/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
box.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<corners android:radius="10dp" />
<gradient
android:angle="90"
android:startColor="#422570"
android:centerColor="#7E4DF0"
android:endColor="#4D2779" />
</shape>
shadow.xml
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:height="50dp"
android:width="300dp"
android:viewportHeight="30"
android:viewportWidth="100">
<path
android:pathData="M 5,0 L 95,0 100,30 0,30 5,0 z" >
<aapt:attr name="android:fillColor">
<gradient
android:endColor="#00FFFFFF"
android:endX="50"
android:endY="99"
android:startColor="#C47C7C7C"
android:startX="50"
android:startY="1"
android:type="linear" />
</aapt:attr>
</path>
</vector>
根据需要更改颜色或大小我只是使用LinearLayout,可以根据需要使用Relative。
即使使用androidx,也要将其添加到gradle.build中
defaultConfig {
//...
vectorDrawables {
useSupportLibrary true
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句