我想使用svg-android加载SVG图片作为布局背景。 我尝试了这个,但我的布局背景仍然是白色的(在logcat中没什么特别的):
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());
}
我做错了什么?
答案 0 :(得分: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,然后让onDraw()
方法执行其工作。
另请注意,我的SVG图像保存在assets
文件夹中,因此我使用AssetManager
加载SVG,如上面的代码所示。