Nếu bạn muốn thiết lập chế độ xem ở hình dạng 3D, View.setElevation()
và View.setTranslationZ()
là một ý tưởng hay.
Nhưng thật không may, hai thuộc tính và phương pháp được giới thiệu kể từ Android API 21. Vì vậy, bạn không thể sử dụng chúng trên các thiết bị trước L hoặc API 21.
Nhưng, vẫn còn một cách để tùy chỉnh bóng và viền của chế độ xem của bạn.
Các giới hạn của nền của chế độ xem có thể vẽ được xác định hình dạng mặc định của bóng của nó. Đường viền đại diện cho hình dạng bên ngoài của một đối tượng đồ họa và xác định vùng gợn cho phản hồi cảm ứng.
xem xét quan điểm này, định nghĩa với một drawable nền:
<TextView
android:id="@+id/myview"
...
android:elevation="2dp"
android:background="@drawable/myrect" />
Các drawable nền được định nghĩa là một hình chữ nhật với góc tròn:
<!-- res/drawable/myrect.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#42000000" />
<corners android:radius="5dp" />
</shape>
Quan điểm đã phủ bóng đen với góc tròn, vì nền có thể vẽ được xác định đường viền của khung nhìn. Việc cung cấp phác thảo tùy chỉnh sẽ ghi đè hình dạng mặc định của bóng của chế độ xem.
Để xác định một phác thảo tùy chỉnh cho một cái nhìn trong mã của bạn:
- Mở rộng lớp
ViewOutlineProvider
.
- Ghi đè phương thức
getOutline()
.
- Chỉ định nhà cung cấp phác thảo mới cho chế độ xem của bạn với phương pháp
View.setOutlineProvider()
.
Bạn có thể tạo đường viền hình bầu dục và hình chữ nhật với các góc tròn bằng các phương pháp trong lớp Outline
. Nhà cung cấp phác thảo mặc định cho các khung nhìn có được đường viền từ nền của khung nhìn. Để ngăn chế độ xem đổ bóng, hãy đặt nhà cung cấp phác thảo của nó thành null
.
Hy vọng điều đó sẽ hữu ích.
P.S.: yourAppNs:elevation="4dp"
sẽ là một ý tưởng hay nếu bạn đang sử dụng android-design-library.
Độ cao không khả dụng trên trước L. –
tôi đọc phần này 'Bạn cũng có thể đặt mã này từ mã bằng cách sử dụng getElevation()/setElevation() (với miếng dán trong ViewCompat)' tại đây: http: //android-developers.blogspot .de/2014/10/implementation-material-design-in-your.html – AdrianoCelentano
@AdrianoCelentano Thats chính xác nhưng nó không có tác dụng trên các thiết bị pre-5.0 –