如何在原生android应用程序中使用svg创建逐帧动画 我知道android本机不支持SVG 我选择显示svg文件。这个库不支持SVG构建动画,这没关系,因为这不是我需要的

如何在原生android应用程序中使用svg创建逐帧动画 我知道android本机不支持SVG 我选择显示svg文件。这个库不支持SVG构建动画,这没关系,因为这不是我需要的,android,animation,svg,frame,Android,Animation,Svg,Frame,我扩展了RealiveLayout,将svg添加到视图中。这个很好用 public class Graphics extends RelativeLayout { public Graphics(Context context, AttributeSet attrs) { super(context, attrs); } public void showConnectedAnimation() { //TODO: show animation

我扩展了RealiveLayout,将svg添加到视图中。这个很好用

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

可能的解决方案
是否有任何方法可以使用svg库中的动态创建AnimationDrawable的动画列表,其中充满了动态创建的ImageView对象


任何帮助都将不胜感激

您是否尝试使用Canvas在某种SurfaceView上绘制svg形状?

我没有尝试过,但看起来您可以使用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);
ImageView-ImageView=
AnimationDrawable anim=新的AnimationDrawable();
SVG SVG=SVG.getFromResource(this,R.raw.frame1);
addFrame(新的picturedravable(svg.renderToPicture()),10);
svg=svg.getFromResource(this,R.raw.frame2);
addFrame(新的picturedravable(svg.renderToPicture()),10);
.. 等
imageView.SetPicturedRavable(动画);

我已经阅读了说明画布用于需要频繁重画的图形的文档。(主要是游戏)。在我的例子中,我有一个静态循环。我想我可以自己用一个定时器和一个小尺寸的画布来编码动画,但是这对我来说似乎太过分了。@a我还没有,还没有时间。
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();