2014-10-20 17 views
18

Tôi đang làm việc trên một ứng dụng và muốn có hiệu ứng độ cao trên ImageView hoặc bất kỳ View (! CardView trong thư viện hỗ trợ) trong API Pre L. Nhưng tôi không thể đạt được những gì tôi đã cố gắng được sử dụng tài sản android:elevation nhưng nó không có bất kỳ tác dụng (Không có độ cao).Hiệu ứng độ cao Android L trong Pre L (chỉ sử dụng thuộc tính nâng cao)

Tôi không thể tìm thấy bất kỳ API nào, nếu ai đó chỉ ra bất kỳ tài liệu nào để đạt được điều này trong Pre L hoặc bất kỳ đoạn mã nào từ Thư viện hỗ trợ được đánh giá cao.

+11

Độ cao không khả dụng trên trước L. –

+2

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

+1

@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 –

Trả lời

1
  • ViewCompat.setElevation()/getElevation() không hoạt động trước Lollipop.
  • Có isnt bất cứ điều gì đáng để thử qua tại các thư viện hỗ trợ, ít nhất cho đến khi phiên bản 21.1.1
  • Đối với việc tạo ra một hiệu ứng cao bởi bản thân hãy nhìn vào this
2

Nếu bạn muốn thiết lập chế độ xem ở hình dạng 3D, View.setElevation()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:

  1. Mở rộng lớp ViewOutlineProvider.
  2. Ghi đè phương thức getOutline().
  3. 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.

+0

yourAppNs: elevation = "4dp" không hoạt động – ThanosFisherman

+0

bạn có nhập khẩu ** android-thiết kế-thư viện ** và thiết lập 'xmlns: yourAppNs = "http://schemas.android.com/apk/res-auto" 'trên bạn xem gốc ? – SilentKnight

+0

vâng tất nhiên nhưng nó không có bất kỳ ảnh hưởng đến quan điểm của tôi vì vậy tôi làm việc này khoảng từ mã java sử dụng ViewCompat.setElevation (MyView, 5) – ThanosFisherman

Các vấn đề liên quan