Android中如何创建顶部带缺口的TicketView?
实现顶部带缺口的TicketView解决方案
由于com.vipulasri:ticketview库本身没有提供顶部缺口的配置属性,无法通过修改现有属性实现你要的效果,推荐通过自定义背景Drawable的方式来实现,步骤如下:
1. 创建带顶部缺口的背景Drawable
在res/drawable目录下新建ticket_background.xml,通过layer-list组合形状,用与父布局背景色一致的圆形模拟顶部缺口:
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 主背景:圆角矩形 --> <item> <shape android:shape="rectangle"> <solid android:color="#FF5733"/> <corners android:radius="4dp"/> </shape> </item> <!-- 顶部左侧缺口:用圆形覆盖主背景顶部 --> <item android:width="20dp" android:height="20dp" android:top="-10dp" android:left="-10dp"> <shape android:shape="oval"> <!-- 这里的颜色要和TicketView所在父布局的背景色一致 --> <solid android:color="@android:color/white"/> </shape> </item> <!-- 顶部右侧缺口 --> <item android:width="20dp" android:height="20dp" android:top="-10dp" android:right="-10dp"> <shape android:shape="oval"> <solid android:color="@android:color/white"/> </shape> </item> </layer-list>
2. 修改TicketView布局配置
去掉原布局中的tv_backgroundColor属性,改用自定义的背景Drawable,并添加顶部padding避免文字被缺口遮挡:
<com.vipulasri.ticketview.TicketView android:id="@+id/ticketView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/ticket_background" android:paddingTop="10dp" app:tv_cornerRadius="4dp" app:tv_dashHeight="10dp" app:tv_dashGap="4dp" app:tv_text="Sample Ticket" app:tv_textColor="#FFFFFF" app:tv_textSize="16sp" />
注意事项
- 如果TicketView所在的父布局背景不是白色,需要把Drawable中圆形的
solid颜色改成父布局的背景色,才能正确显示缺口效果。 - 可以调整Drawable中圆形的
width/height以及偏移值(top/left/right),来改变缺口的大小和位置。
内容的提问来源于stack exchange,提问作者vyshnav vyshu
相关产品推荐
相关产品推荐

