【问题标题】:How to fit GIF file to screen size in android如何在 android 中使 GIF 文件适合屏幕大小
【发布时间】:2012-05-22 04:10:06
【问题描述】:

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

如何缩放或调整 gif 文件以适应屏幕大小?

我已经使用 Movie 类获取 GIF 视图自定义视图和播放动画。

【问题讨论】:

  • 你找到解决办法了吗??

标签: android view animated-gif


【解决方案1】:

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

    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

【讨论】:

    【解决方案2】:

    试试这个 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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        【解决方案4】:

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

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

        要缩放动画, check this.

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

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

          • 基本上只是指向另一个站点的链接的答案通常不是很有帮助。链接也会过时或中断,所以你介意在这里总结一下重要的部分吗?具体来说,本教程的任何部分都解决了 GIF 缩放问题,因为这就是这个问题的意义所在。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-24
          • 1970-01-01
          • 2015-06-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多