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

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

可能的解决方案
有没有办法为 AnimationDrawable 动态创建动画列表,使用svg 库中的SVGImageView填充动态创建的 ImageView 对象?

任何帮助将非常感激!

4

3 回答 3

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();
于 2013-09-10T06:28:44.420 回答
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);
于 2013-08-20T11:21:18.933 回答
0

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

于 2013-07-24T16:01:37.427 回答