如何在本机Android应用程序中使用svg创建逐帧动画

时间:2013-07-24 11:54:21

标签: android animation svg frame

  • 我知道android本身不支持SVG。
  • 我选择了androidsvg来发送svg文件。这个lib不支持SVG-buildin-animations,这没关系,因为那不是我需要的。

我已经扩展了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对象?

任何帮助都会非常感激!

3 个答案:

答案 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();