2015-05-23 138 views
1

我有一个gif图像(3个点出现并逐一消失),我试图在我的闪屏上设置。如何在xml中使用load-animation?下面是我的启动画面的代码。显示GIF图像

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(); 
     } 
    } 

} 
+1

男人,这不是一个网页 - 你的gif会在不同的屏幕上看起来很丑。你必须用原生动画来做到这一点,而且更容易。 – Divers

回答

0

的Android本身不支持以这种方式GIF格式。要播放gif,您可以将其加载到WebView中,也可以使用Movie类。

有一个有用的Ruby脚本(原始要点here),可以将gif转换为animation-list 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 
+0

所有的东西似乎像我的拐杖 – Divers

+0

是的。我并不是建议任何人都应该使用gif来处理本地动画,但这些都是我找到的解决方案。 – Andrew

0

我认为使用GIF对于您的问题是一个相当沉重的解决方案。你有没有想过使用一个库,如WaitingDots

作者使用自定义textview和文本跨度来实现相同的结果。这个解决方案将为您提供定制动画的空间。