3

我正在使用电影类播放 gif 动画文件,但无法放入屏幕。

如何将 gif 文件缩放或适合屏幕大小?

我已经使用 Movie 类进行了 GIF 视图自定义视图和播放动画。

4

5 回答 5

4

您可以使用以下代码执行此操作:

    float scaleWidth = (float) ((screenwidth / (1f*gifwidth)));//add 1f does the trick
    float scaleHeight = (float) ((screenheight / (1f*gifheight)));
    canvas.scale(scaleWidth, scaleHeight);
    mMovie.draw(canvas, 0, 0);//mMovie is my gif picture
于 2013-12-28T19:44:54.540 回答
4

试试这个 GifImageView

将电影的高度宽度设置为屏幕高度宽度。

   init()
    {
        WindowManager wManager = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
        Display display = wManager.getDefaultDisplay();
        float screenwidth = display.getWidth();
        float screenheight = display.getHeight();

        mWidth = (int) screenwidth;
        mHeight = (int) screenheight;

        //Then force invalidated the layout of this view.

        requestLayout();
    }

当您从 Activity 调用 setGifImageResource() 时,将调用此方法。

活动将如下所示:

@Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.myactivity);

        GifImageView gifImageView = (GifImageView) findViewById(R.id.GifImageView);
        gifImageView.setGifImageResource(R.drawable.my_gif);
    }

同样在我们的自定义布局中,我们需要以下内容:

确定测量的视图宽度和高度。

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {     
        setMeasuredDimension(mWidth, mHeight);
}

在画布上绘图时的重要代码。

@Override
protected void onDraw(Canvas canvas) {

        //Other general code (included in given link)...

        if (mMovie != null) {

            //Other general code (included in given link)...

            canvas.scale((float) this.getWidth() / (float) mMovie.width(),
                    (float) this.getHeight() / (float) mMovie.height());
            mMovie.draw(canvas, 0, 0);          
            invalidate();
        }
}

我已经根据我们的要求定制了这个视图。

检查下面的链接。

https://github.com/NihalPandya/demoUpload/blob/master/GifImageView.java

于 2018-04-13T13:26:04.980 回答
2

如果您使用的是画布(@surface 视图),则在游戏循环中获取其高度和宽度,并使用其值绘制背景图像。如果不,

WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
float tmp = display.getHeight;

现在 tmp 将包含显示高度的值。宽度的相同猜测。使用这些属性来拉伸 gif。

但是我必须说这个功能已被弃用,必须有更好的方法,但这会很好用:)

于 2012-12-16T07:30:31.307 回答
1

您可以使用逐帧动画而不是动画 gif 来获得类似的最终结果和缩放。您需要从 gif 中提取每个帧,并将单个帧作为 png(或其他支持的格式)文件放在 res/drawable 文件夹中。创建和使用动画drawable:

http://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html

要缩放动画, 请选中此项

您可以使用各种scaleType来使用此方法缩放动画。

我知道这并不能直接回答问题,但它会给出预期的最终结果。

于 2013-12-28T21:49:18.170 回答
0

我会过去看看涵盖 3 种不同方式显示/播放 GIF 的完整教程。显然这不是很容易,谷歌仍然有未解决的问题报告。祝你好运 :)

于 2012-12-16T05:06:38.807 回答