2017-10-02 10 views
1

Flutterでアニメーション画像をどのようなフォーマットで表示したいですか?現時点では、現在利用可能なソリューションはvideo_loaderの1つしかないようです。これはフルスクリーンでのみ動作しますが、私の使用例に合わない。Flutterにアニメーション画像を表示するには?

どのように私はこれを整理することができますか?

+0

あなたがブロックされていますことをお詫び申し上げます。 https://github.com/flutter/flutter/issues/204この問題を「賞賛」し、ユースケースにコメントを残せますか?ありがとう! –

+1

すでにありました:)しかし、私はコメントを残します – Darky

+1

[もっと速い回答を得るために、どのような状況で私の質問に「緊急」や他の類似のフレーズを追加してもいいですか?](// meta.stackoverflow.com/ q/326569) - これはボランティアに対処する理想的な方法ではなく、おそらく回答を得ることに逆効果があるということです。これをあなたの質問に追加しないでください。 – halfer

答えて

6

https://ezgif.com/splitを使用してフレームを別々の画像に分割し、それらをpubspec.yamlのアセットとして追加することができます。

次に、Animation<int>を使用して、表示する正しいフレームを選択します。ちらつきを避けるためにgaplessPlayback: trueを設定してください。

たとえば、次のコードはGuillaume Kurkdjianによって作成されたanimated GIFのフレームを表示します。

import 'package:flutter/material.dart'; 

void main() { 
    runApp(new MyApp()); 
} 

class MyApp extends StatelessWidget { 
    @override 
    Widget build(BuildContext context) { 
    return new MaterialApp(
     theme: new ThemeData.dark(), 
     home: new MyHomePage(), 
    ); 
    } 
} 

class MyHomePage extends StatefulWidget { 
    @override 
    State createState() => new MyHomePageState(); 
} 

class MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin { 
    AnimationController _controller; 
    Animation<int> _animation; 

    @override 
    void initState() { 
    _controller = new AnimationController(vsync: this, duration: const Duration(seconds: 5)) 
     ..repeat(); 
    _animation = new IntTween(begin: 0, end: 116).animate(_controller); 
    } 

    Widget build(BuildContext context) { 
    return new Scaffold(
     body: new Column(
     mainAxisAlignment: MainAxisAlignment.center, 
     children: <Widget>[ 
      new AnimatedBuilder(
      animation: _animation, 
      builder: (BuildContext context, Widget child) { 
       String frame = _animation.value.toString().padLeft(3, '0'); 
       return new Image.asset(
       'assets/frame_${frame}_delay-0.04s.png', 
       gaplessPlayback: true, 
      ); 
      }, 
     ), 
      new Text('Image: Guillaume Kurkdjian', style: new TextStyle(fontStyle: FontStyle.italic)), 
     ], 
    ), 
    ); 
    } 
} 
+2

これは私の好きな答えの一つですStack Overflow –

+0

悲しいことに、それは長い貯蔵寿命を持つ可能性が高いです。将来的に[アニメーションGIFサポート](https://github.com/flutter/flutter/issues/204)が実装されている場合は、その代わりに使用してください! –

+0

は素晴らしく機能します! – sofakingforever

関連する問題