2016-01-16 16 views
49

Tôi đang cố sử dụng VectorDrawable trong một LayerList mà không cần chia tỷ lệ vectơ. Ví dụ:Cách căn giữa vector có thể vẽ được trong danh sách lớp mà không cần chia tỷ lệ

<layer-list> 
    <item android:drawable="@color/grid_item_activated"/> 
    <item android:gravity="center" android:drawable="@drawable/ic_check_white_48dp"/> 
</layer-list> 

Các drawable ic_check_white_48dp id định nghĩa là:

<vector xmlns:android="http://schemas.android.com/apk/res/android" 
     android:width="48dp" 
     android:height="48dp" 
     android:viewportWidth="24.0" 
     android:viewportHeight="24.0"> 
    <path 
     android:fillColor="#FFFFFFFF" 
     android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/> 
</vector> 

Hiệu quả mong muốn là biểu tượng kiểm tra để được tập trung trong drawable lớp, mà không cần mở rộng quy mô. Vấn đề là, danh sách lớp ở trên làm cho biểu tượng dấu kiểm được thu nhỏ để vừa với kích thước lớp.

tôi thể sản xuất hiệu quả mong muốn nếu tôi thay thế drawable vector với PNG cho mỗi mật độ và sửa đổi các lớp-list như vậy:

<layer-list> 
    <item android:drawable="@color/grid_item_activated"/> 
    <item> 
     <bitmap android:gravity="center" android:src="@drawable/ic_check_white_48dp"/> 
    </item> 
</layer-list> 

Có cách nào tôi có thể làm điều này bằng cách sử dụng VectorDrawable ?

+7

Dường như đây có thể chỉ là lỗi trong API 21/22. Tôi vừa thử nghiệm trên thiết bị API 23 và vector có thể vẽ được chính xác ở giữa. – ashughes

+0

Bạn nên trả lời câu hỏi của riêng mình và chấp nhận câu hỏi đó. Bằng cách đó, nó hiển thị rõ hơn và câu hỏi không hiển thị như chưa được trả lời. –

+1

Tôi chưa trả lời câu hỏi của mình vì tôi chưa có câu trả lời cho việc cần làm trên API 21/22. Giải pháp tạm thời của tôi là sử dụng PNG thay vì vectơ. Hy vọng vẫn tìm cách làm cho vectơ hoạt động được. – ashughes

Trả lời

8

Tôi đã gặp phải sự cố tương tự khi cố gắng căn giữa vectơ có thể vẽ trên danh sách lớp.

Tôi có một cách giải quyết, nó không hoàn toàn giống nhau nhưng nó hoạt động, bạn cần phải thiết lập một kích thước cho toàn bộ drawable và thêm đệm vào mục vector:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape> 
      <size android:height="120dp" android:width="120dp"/> 
      <solid android:color="@color/grid_item_activated"/> 
     </shape> 
    </item> 
    <item android:top="24dp" 
      android:bottom="24dp" 
      android:left="24dp" 
      android:right="24dp" 
      android:drawable="@drawable/ic_check_white_48dp"/> 
</layer-list> 

Kích thước của hình trên bộ kích thước của toàn bộ drawable, 120dp trong ví dụ này, padding trên mục thứ hai, 24dp trong ví dụ này, tập trung hình ảnh vector.

của nó không giống như sử dụng gravity="center" nhưng cách làm việc của nó sử dụng vectơ trong API 21 và 22.

+1

Điều này nghe như nó sẽ yêu cầu bạn biết kích thước chính xác của drawable (để thiết lập kích thước hình dạng), thay vì để nó lấp đầy toàn bộ không gian được thiết lập với kiểm tra drawable trung tâm bên trong nó. – ashughes

+0

nó có thể không biết kích thước nhưng bạn không thể thay đổi padding với phương pháp này, bạn có thể lớp drawables trên đầu trang của mỗi khác trong imageviews. Như tôi đã nói ở trên không có giải pháp hoàn hảo nào cho một 'gravity =" center "' trong API 21 và 22. –

9

Được phải vật lộn với vấn đề tương tự. Cách duy nhất tôi tìm thấy để khắc phục điều này và tránh các drawable để quy mô lên là để thiết lập kích thước drawable và sử dụng trọng lực để sắp xếp nó:

<layer-list> 
    <item android:drawable="@color/grid_item_activated"/> 
    <item 
     android:gravity="center" 
     android:width="48dp" 
     android:height="48dp" 
     android:drawable="@drawable/ic_check_white_48dp"/> 
</layer-list> 

Hy vọng nó sẽ giúp!

+13

Điều này không giúp ích cho API 21-22, vì thuộc tính 'width' không có sẵn trên các cấp API đó. Trên API 23, chúng không cần thiết vì lỗi đã được sửa và không thể kéo dài được nữa. – WonderCsabo

+0

không hoạt động nữa! –

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