6

Phiên bản mới nhất của Thư viện hỗ trợ Android (23.2) thêm hỗ trợ cho các đối tượng vẽ vector. Nó dường như làm điều này bằng cách rasterizing các vectơ trên bay trên nền tảng mà không tự nhiên hỗ trợ drawables vector.Thư viện hỗ trợ Android 23,2 bản vẽ vector bị mờ

Tuy nhiên, hình ảnh quét lại có vẻ là kích thước cố định thay vì phụ thuộc vào cách sử dụng. Đây là một ví dụ.

Vector

<vector xmlns:android="http://schemas.android.com/apk/res/android" 
     android:width="24dp" 
     android:height="24dp" 
     android:viewportWidth="24.0" 
     android:viewportHeight="24.0"> 
    <path 
     android:fillColor="#FF000000" 
     android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zm0,3c1.66,0 3,1.34 3,3s-1.34,3 -3,3 -3,-1.34 -3,-3 1.34,-3 3,-3zm0,14.2c-2.5,0 -4.71,-1.28 -6,-3.22 0.03,-1.99 4,-3.08 6,-3.08 1.99,0 5.97,1.09 6,3.08 -1.29,1.94 -3.5,3.22 -6,3.22z"/> 
</vector> 

Layout

<ImageView 
    android:layout_width="128dp" 
    android:layout_height="128dp" 
    android:id="@+id/imageView" 
    app:srcCompat="@drawable/vector1"/> 

Các vector là 24dp x 24dp. Nó được sử dụng trong một ImageView đó là 128dp x 128dp. Trên các nền tảng không hỗ trợ drawables vector, hình ảnh kết quả bị mờ vì vector được rasterized ở 16dp và thay đổi kích thước thành 128dp.

Giải pháp duy nhất tôi tìm thấy là tạo một vector riêng biệt có thể vẽ được cho từng kích thước dự định. Nó khá khó chịu để tạo ra một loạt các vectơ trùng lặp chỉ với chiều cao và chiều rộng thay đổi. Và điều đó không giải quyết được vấn đề nếu bạn muốn có thể vẽ được fill_parent hoặc được kích thước động theo một cách khác.

Phải xác định kích thước hình ảnh vectơ của bạn ở mức tiên tiến gần như hoàn toàn đánh bại lợi ích của việc sử dụng vectơ ngay từ đầu.

Có ai có công việc thực sự xung quanh không?

Trả lời

11

vector rasterized tại 16dp và thay đổi kích cỡ để 128dp

lên đến 23.1, Android đã tạo ra hình ảnh raster bắt đầu từ cung cấp VectorDrawable. Điều này đã thay đổi trong v23.2 của thư viện hỗ trợ. Hành vi này xảy ra nếu bạn thiết lập chính xác build.gradle của mình.

Nếu bạn đang sử dụng Gradle Plugin 2.0+, thêm

android { 
    defaultConfig { 
    vectorDrawables.useSupportLibrary = true 
    } 
} 

nếu bạn đang sử dụng 1.5.0

android { 
    defaultConfig { 
    generatedDensities = [] 
    } 

    // This is handled for you by the 2.0+ Gradle Plugin 
    aaptOptions { 
    additionalParameters "--no-version-vectors" 
    } 
} 

sau khi bạn đồng bộ hóa, làm sạch không gian làm việc của bạn và xây dựng một lần nữa. Bạn có thể đọc thêm về số điện thoại herehere

+0

Cảm ơn, tôi đã bỏ qua việc thêm phần đã tạo và tôi đã không nhận ra rằng mọi thứ có thể rasterize hình ảnh. – Ben

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