Android 显示GIF图像

Android 显示GIF图像,android,android-animation,animated-gif,Android,Android Animation,Animated Gif,我有一个gif图像3点出现和消失一个接一个,我正试图设置在我的闪屏。如何使用xml加载动画来实现这一点?下面是我启动屏幕的代码 public class MainActivity extends Activity { private static String TAG = MainActivity.class.getName(); private static long SLEEP_TIME = 5; // Sleep for some time @Override

我有一个gif图像3点出现和消失一个接一个,我正试图设置在我的闪屏。如何使用xml加载动画来实现这一点?下面是我启动屏幕的代码

public class MainActivity extends Activity {

    private static String TAG = MainActivity.class.getName();
    private static long SLEEP_TIME = 5; // Sleep for some time

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        // Start timer and launch main activity
        IntentLauncher launcher = new IntentLauncher();
        launcher.start();



    }

    private class IntentLauncher extends Thread {

        @Override
        /**
         * Sleep for some time and than start new activity.
         */
        public void run() {
            try {
                // Sleeping
                Thread.sleep(SLEEP_TIME*1000);
            } catch (Exception e) {
                Log.e(TAG, e.getMessage());
            }

            // Start main activity
            Intent intent = new Intent(MainActivity.this, Option.class);
            MainActivity.this.startActivity(intent);
            MainActivity.this.finish();
        }
    }

}

Android并不以这种方式支持GIF。要播放gif,可以在WebView中加载gif,也可以使用该类

有一个有用的Ruby脚本原始要点,可以将gif转换为动画列表xml文件

#!/usr/bin/ruby
require 'fileutils'
require 'RMagick'
require 'slop'
require 'builder'

opts = Slop.new do
  banner "gif2animdraw [options]\n"
  on :i, :input=, 'path to animated GIF (or directory of GIFs)', :required => true
  on :o, :outdir=, 'path to root output directory', :required => true
  on :d, :density=, 'density name to use for frames', :required=>true
  on :oneshot, 'if set, animation does not repeat', :required => false, :default=>false
  help
end

begin
  opts.parse
rescue
  puts opts.help
  exit -1
end

if !['ldpi', 'mdpi', 'tvdpi', 'hdpi', 'xhdpi', 'xxhdpi', 'xxxhdpi'].include?(opts[:d])
  puts "Invalid density #{opts[:d]}"
  exit -1
end

glob=File.directory?(opts[:i]) ? File.join(opts[:i], '*.gif') : opts[:i]

Dir[glob].each do |gif|
  input=Magick::ImageList.new(gif).coalesce
  output=File.join(opts[:o], 'drawable')
  output_density=File.join(opts[:o], 'drawable-'+opts[:d])
  basename=File.basename(gif, '.gif').downcase.gsub(/\W/,'_')

  FileUtils.mkdir_p output
  FileUtils.mkdir_p output_density

  Dir.glob(File.join(output_density, basename+'*.png')).each {|f| File.delete(f) }

  input.write File.join(output_density, basename+'_%d.png')

  builder = Builder::XmlMarkup.new(:indent=>2)

  builder.tag!('animation-list',
                'xmlns:android'=>'http://schemas.android.com/apk/res/android',
                'android:oneshot'=>opts[:oneshot]) do
    i=0
    input.each do |frame|
      builder.item('android:drawable'=>"@drawable/#{basename}_#{i}",
                    'android:duration'=>frame.delay*1000/input.ticks_per_second)
      i+=1
    end
  end

  open(File.join(output, basename+'.xml'), 'w') do |f|
    f.puts builder.target!
  end
end

我认为使用GIF是解决你问题的一个相当繁重的方法。你有没有想过使用像这样的图书馆


作者使用自定义文本视图和文本范围来实现相同的结果。此解决方案将为您提供定制动画所必需的空间。

伙计,这不是一个网页-您的gif在不同的屏幕上看起来很难看。你必须用本地动画来做,而且很容易。所有这些东西对我来说都像是拐杖。我并不是建议任何人都应该在本地动画上使用GIF,但这些是我找到的解决方案。