我已经扩展了RealiveLayout以将svg添加到View中。这很好。
public class Graphics extends RelativeLayout {
public Graphics(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void showConnectedAnimation() {
//TODO: show animation
SVGImageView svgImageView = new SVGImageView(this.getContext());
svgImageView1.setImageResource(R.raw.shield);
addView(svgImageView);
}
}
问题
我的目标是让10个小svg文件作为逐帧动画。
我更喜欢使用android的原生AnimationDrawable,但我无法弄清楚如何绕过animation-list.xml
可能的解决方案
有没有办法动态创建AnimationDrawable的动画列表,使用来自svg库的SVGImageView填充动态创建的ImageView对象?
任何帮助都会非常感激!
答案 0 :(得分:0)
您是否尝试使用Canvas在某种SurfaceView上绘制svg形状?
答案 1 :(得分:0)
我还没试过,但看起来你可以使用addFrame()方法向AnimationDrawable添加帧。
类似的东西:
ImageView imageView = <get from layout XML or create it>
AnimationDrawable anim = new AnimationDrawable();
SVG svg = SVG.getFromResource(this, R.raw.frame1);
anim.addFrame(new PictureDrawable(svg.renderToPicture()), 10);
svg = SVG.getFromResource(this, R.raw.frame2);
anim.addFrame(new PictureDrawable(svg.renderToPicture()), 10);
.. etc..
imageView.setPictureDrawable(anim);
答案 2 :(得分:0)
AnimationDrawable anim = new AnimationDrawable();
SVG svg;
svg = SVGParser.getSVGFromResource(getResources(), R.raw.frame1);
anim.addFrame(new PictureDrawable(svg.getPicture()),500);
svg = SVGParser.getSVGFromResource(getResources(), R.raw.strokes);
anim.addFrame(svg.createPictureDrawable(), 500);
svg = SVGParser.getSVGFromResource(getResources(), R.raw.transformations);
anim.addFrame(svg.createPictureDrawable(), 500);
svg = SVGParser.getSVGFromResource(getResources(), R.raw.gradients);
anim.addFrame(svg.createPictureDrawable(), 500);
//so on
imageView.setImageDrawable(anim);
anim.start();