2014-03-29 83 views
2

我想使用svg-android將SVG圖片加載爲佈局背景。 我想這一點,但我的佈局的背景仍然是白色(在logcat中沒有什麼特別):從SVG資源加載背景

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    SVG svg = SVGParser.getSVGFromResource(getResources(), R.raw.bg); 
    RelativeLayout rl = (RelativeLayout) findViewById(R.id.mainLay); 
    rl.setBackground(svg.createPictureDrawable()); 
} 

我在做什麼錯?

回答

2

好吧,有一段時間我甚至想知道在視圖中放置SVG圖像的類似問題。

下面是它顯示在Android中的CustomView SVG圖像演示:

// MainActivity.java 
package com.test.svg; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Window; 
import android.view.WindowManager; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
     WindowManager.LayoutParams.FLAG_FULLSCREEN); 

    CustomView view = new CustomView(this); 
    view.setBackgroundResource(android.R.color.holo_green_dark); 
    setContentView(view); 
    } 
} 

這裏的CustomView類:

// CustomView.java 
package com.test.svg; 

import java.io.IOException; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Picture; 
import android.util.AttributeSet; 
import android.view.View; 

import com.larvalabs.svgandroid.SVG; 
import com.larvalabs.svgandroid.SVGParseException; 
import com.larvalabs.svgandroid.SVGParser; 

public class CustomView extends View { 

    private Picture picture; 
    private int scaleFactor; 

    public CustomView(Context context) { 
    super(context); 
    initialize(); 
    } 

    public CustomView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    initialize(); 
    } 

    private void initialize() { 
    scaleFactor = 1; 
    try { 
     setLayerType(View.LAYER_TYPE_SOFTWARE, null); // This is important!!! 
     SVG svg = SVGParser.getSVGFromAsset(getContext().getAssets(), 
     "Character.svg"); 
     picture = svg.getPicture(); 
    } catch (SVGParseException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    } 

    public void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    canvas.save(); 
    // Code for centering the SVG. 
    canvas.translate((getWidth() - scaleFactor * picture.getWidth()) >> 1, 
     (getHeight() - scaleFactor * picture.getHeight()) >> 1); 
    canvas.scale(scaleFactor, scaleFactor); 
    canvas.drawPicture(picture); 
    canvas.restore(); 
    } 
} 

什麼是在上面的代碼片段重要的是行:

setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

也下載並使用SVG-Android-2而不是你唱第一個版本。

除此之外,您可以調整此代碼以顯示SVG作爲您的背景圖像。您只需按照某個因子縮放SVG,然後讓方法完成其工作。

另請注意,我的SVG圖像保存在assets文件夾中,所以我使用AssetManager來加載SVG,如上面的代碼所示。

+0

感謝您的詳細回覆,它幫了我很多!但我沒有使用SVG.resizePicture方法的比例因子,而是使用了PictureDrawable。 – Lovy