2011-10-22 40 views
11

Tôi đang cố gắng sử dụng hình ảnh SVG (được tạo bằng Inkscape và được lưu dưới dạng SVG thuần túy) làm nền cho ứng dụng của tôi. Tôi đang cố gắng làm điều này bằng cách sử dụng thư viện svg-android. Tôi có một tệp có tên là background.svg trong số res/raw. Mã của tôi trông như thế này:Sử dụng SVG làm nền có thể vẽ trong Android

SVG svg = SVGParser.getSVGFromResource(getResources(), R.raw.background); 
Drawable pictureDrawable = svg.createPictureDrawable(); 
Bitmap bitmap = Bitmap.createBitmap(pictureDrawable.getIntrinsicWidth(), pictureDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); 
BitmapDrawable bitmapDrawable = new BitmapDrawable(bitmap); 

LinearLayout backgroundLayout = (LinearLayout) findViewById(R.id.background); 
bitmapDrawable.setTileModeX(Shader.TileMode.REPEAT); 
backgroundLayout.setBackgroundDrawable(bitmapDrawable); 

Tuy nhiên khi ứng dụng của tôi bắt đầu lên, không có gì xuất hiện như là nền tảng (khác với màu nền từ cách bố trí). bố trí tập tin xml của tôi là như sau:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#aacceeff" 
    > 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/background" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    > 
</LinearLayout> 

</LinearLayout> 

CẬP NHẬT

Dường như có một vấn đề với SVG của tôi. Nó có thể là do thực tế là tất cả các tính năng không được hỗ trợ.

+0

Bạn đã cố gắng thiết lập hình ảnh DrawableDrawable làm nền của bố cục thay vì BitmapDrawable bitmapDrawable? –

+0

@DimitrisMakris Vâng, đó là điều đầu tiên tôi đã thử nhưng tôi vẫn có một nền trống. Một vấn đề khác là không có cách nào để thiết lập ốp lát trên một 'PictureDrawable'. –

+0

Chỉ trong trường hợp; - U biết android không hỗ trợ SVG Thử mã trên firefox cho Android? – Chasbeen

Trả lời

14

Dự án svg-android đã không được cập nhật trong hơn một năm và nó không hỗ trợ SVG1.2 do đó svgs được tạo ra bởi Inkscape (mã nguồn mở) không được hỗ trợ.

Có tuy nhiên là một android mới thư viện svg: AndroidSVG

Họ đang trên phiên bản 1.2 và làm việc trên 1,3 hiện đang được tiến hành. Chỉ bao gồm thư viện jar có thể lập trình bao gồm svgs trong các ứng dụng Android. Hầu như tất cả các tính năng svg được bao gồm. Tôi chưa tìm được một svg mà tôi không thể kết hợp với thư viện này.

Nếu bạn bao gồm androidsvg từ nguồn (hg clone) trong dự án của bạn như là một module thư viện bạn sẽ có được lớp SVGImageView đó là một phần mở rộng của ImageView nhờ đó bạn có thể thêm svg để dự án của bạn bằng cách sử dụng các file layout xml như vậy:

<com.caverock.androidsvg.SVGImageView 
    xmlns:svg="http://schemas.android.com/apk/res-auto" 
    android:layout_width="100dp" 
    android:layout_height="50dp" 
    svg:svg="filename.svg"/> 

Vậy đó. Tất cả những gì bạn cần làm là đặt filename.svg vào thư mục nội dung và bạn nên làm.

Nó hỗ trợ API 8 trở lên. Có một số vấn đề khi sử dụng API cho < 11 nhưng tôi đã có thể khắc phục những vấn đề này. Tôi đã đăng chúng dưới dạng các vấn đề trên trang dự án và các tác giả đã phản hồi trong vòng vài phút. Chúng đã được thêm vào bản sửa đổi tiếp theo. Nếu bạn gặp bất kỳ sự cố nào, hãy xem xét các sự cố được giải quyết, nếu không tôi sẵn sàng trả lời câu hỏi tại đây.

P.S. Tài liệu và ví dụ trên trang dự án là tuyệt vời và thư viện là một niềm vui để làm việc. Android và svg là một kết hợp mạnh mẽ.

1

Tôi đã thử một ví dụ sử dụng đoạn mã sau và nó được cho thấy nền một cách chính xác:

LinearLayout root = (LinearLayout) findViewById(R.id.background); 
SVG svg = SVGParser.getSVGFromResource(getResources(), 
       R.raw.android_body); 
Drawable pictureDrawable = svg.createPictureDrawable(); 
root.setBackgroundDrawable(pictureDrawable); 

Bạn đã thử với svg khác?

+0

Tôi đã thử tải lên SVG trong một trình duyệt và nó có vẻ hiển thị tốt vì vậy nó không giống như có bất cứ điều gì sai trái với nó. Hãy để tôi thử một svg khác.Oh, bạn cũng thử nó với bố trí lồng nhau như cách tôi có nó? Tôi tự hỏi liệu điều đó có góp phần vào vấn đề không. –

+0

Yeap, exaclty cùng một bố cục, nhưng yep điều này là không thích hợp. Việc sử dụng svg i là từ dự án svg-android (dự án hình nền động) –

+0

Tôi đã thử nó với svg mà họ cung cấp và dường như nó hoạt động. Vì vậy, tôi đoán đó là một vấn đề với svg của tôi. –

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