2014-03-29 1 views
2

svg-android를 사용하여 SVG 그림을 레이아웃 배경으로로드하고 싶습니다. 나는이 시도했지만 내 레이아웃 배경 여전히 흰색 (로그 캣에서 아무것도 특별한) : 내가 잘못 뭐하는 거지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 이미지를 배치하는 비슷한 문제에 대해 궁금해 할 때가있었습니다. 여기

안드로이드에있는 CustomView에 SVG 이미지를 표시하는 데모입니다 :

: 무엇을 위의 코드에서 중요한 것은 라인입니다

// 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(); 
    } 
} 

:

// 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 클래스의

setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

u 대신 SVG-Android-2을 다운로드하여 사용하십시오. 그것의 첫번째 버전을 노래하십시오.

이 코드를 조정하면 SVG를 배경 이미지로 표시 할 수 있습니다. 특정 요소로 SVG의 크기를 조절 한 다음 onDraw() 메서드를 사용하면됩니다.

또한 내 SVG 이미지는 assets 폴더에 보관되어 있으므로 위 코드에 표시된대로 AssetManager을 사용하여 SVG를로드했습니다.

+0

답장을 보내 주셔서 감사합니다. 많은 도움이되었습니다. 그러나 스케일 인자 대신에 SVG.resizePicture 메소드를 사용하면 PictureDrawable을 내 그림으로 만들었습니다. – Lovy