Android 显示GIF图像
我有一个gif图像3点出现和消失一个接一个,我正试图设置在我的闪屏。如何使用xml加载动画来实现这一点?下面是我启动屏幕的代码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
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,但这些是我找到的解决方案。