1

現在、ムービーを使用してカスタム ビューで gif 画像を表示しようとしています。私は文字通りこれを行う最も一般的な方法を使用しました:

public class GifView extends View {

    private Movie movie;
    private long timeElapsed;

    public GifView(Context context) {
        super(context);
        init();
    }

    public GifView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public GifView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        timeElapsed = 0;
        setImage(getResources().openRawResource(R.drawable.sample));
    }

    public void setImage(byte[] bytes) {
        movie = Movie.decodeByteArray(bytes, 0, bytes.length);
        invalidate();
    }

    public void setImage(InputStream is) {
        movie = Movie.decodeStream(is);
        invalidate();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawColor(Color.TRANSPARENT);
        super.onDraw(canvas);

        long now = android.os.SystemClock.uptimeMillis();
        if (timeElapsed == 0) {   // first time
            timeElapsed = now;
        }
        if (movie != null) {
            int dur = movie.duration();
            if (dur == 0) {
                dur = 1000;
            }
            int relTime = (int)((now - timeElapsed) % dur);
            movie.setTime(relTime);
            movie.draw(canvas, getWidth() - movie.width(), getHeight() - movie.height());
            invalidate();
        }
    }
}

これにより、携帯電話 (API 18 を実行する Nexus 4) に GIF の最初のフレームのみが表示されます。このビューを表示するには、このビューのハードウェア アクセラレーションを無効にする必要があることを読みました (関連する行を削除しても何も表示されません)。他の gif 画像で試してみましたが、同じ結果が得られました。私が気づいたことの 1 つは、movie.getDuration()常に 0 を返すことです。これは奇妙ですよね? 何か案が?

4

1 に答える 1

0

Android で GIF を正しく再生する必要がある場合は、3 番目のライブラリを使用する必要があると思います。これは、フレームワークがフォーマットをネイティブにサポートしていないためです。あなたが興味を持っているかもしれないいくつかのプロジェクトは次のとおりです

  • ImageViewEx : アニメーション GIF をサポートし、より優れた密度管理を含む Android の ImageView の拡張機能

  • ION : Android 非同期ネットワークを簡単に。数日前に GIF のサポートを取得し、リモート GIF のダウンロードと表示に特に適しています。

于 2013-11-04T23:25:59.113 に答える