アプリからサーバーからGIF画像をダウンロードし、ImageView
で表示していますが、アニメーション化されていません。ダウンロードしたアニメーションGIF画像を再生する他の方法はありますか?前もって感謝します 。
画像ビューの代わりに以下のカスタムビューを使用しています。
public class SampleView extends View {
private Movie mMovie;
private long mMovieStart;
public SampleView(Context context) {
super(context);
setFocusable(true);
Java.io.InputStream is;
is = context.getResources().openRawResource(R.drawable.girl_dances);
mMovie = Movie.decodeStream(is);
}
public SampleView(Context context, AttributeSet attrSet) {
super(context, attrSet);
setFocusable(true);
Java.io.InputStream is;
is = context.getResources().openRawResource(R.drawable.girl_dances);
mMovie = Movie.decodeStream(is);
}
public SampleView(Context context, AttributeSet attrSet, int defStyle) {
super(context, attrSet, defStyle);
setFocusable(true);
Java.io.InputStream is;
is = context.getResources().openRawResource(R.drawable.girl_dances);
mMovie = Movie.decodeStream(is);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(0x00000000);
Paint p = new Paint();
p.setAntiAlias(true);
long now = Android.os.SystemClock.uptimeMillis();
if (mMovieStart == 0) { // first time
mMovieStart = now;
}
if (mMovie != null) {
int dur = mMovie.duration();
if (dur == 0) {
dur = 1000;
}
int relTime = (int) ((now - mMovieStart) % dur);
mMovie.setTime(relTime);
mMovie.draw(canvas, getWidth() / 2 - mMovie.width() / 2,
getHeight() / 2 - mMovie.height() / 2);
invalidate();
}
}
}
XMLレイアウト:
<com.test.sample.SampleView
Android:id="@+id/gif_view"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
いくつかの調査の後、最良の(または最も簡単な)ソリューションはWebViewを使用することです:
例:
myAnimatedGif.gifファイルをアセットフォルダに配置します。
xml Webビューを作成します。
<WebView
Android:id="@+id/myWebView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"/>
次に、gifファイルをWebビューにロードします。
WebView view = (WebView) findViewById(R.id.myWebView);
view.loadUrl("file:///Android_asset/myAnimatedGif.gif");
楽しい !
他の解決策は、この種のライブラリを使用することです: https://github.com/koral--/Android-gif-drawable
これはWebViewで実現できます。これは私が使用するものです:
import Android.view.View;
import Android.webkit.WebView;
import Android.widget.LinearLayout;
import Android.widget.TextView;
public class Spinner extends LinearLayout{
public Spinner(Context context) {
super(context);
// TODO Auto-generated constructor stub
View.inflate(context, R.layout.spiner, this);
WebView web = (WebView) findViewById(R.id.web);
web.loadUrl("file:///Android_asset/booting.gif");
}
public void setText(String text){
TextView t = (TextView) findViewById(R.id.txtloading);
t.setText(text);
}
public void refresh(){
WebView web = (WebView) findViewById(R.id.web);
web.loadUrl("file:///Android_asset/booting.gif");
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:gravity="center|center_vertical"
Android:padding="10dp">
<WebView Android:id="@+id/web"
Android:layout_width="24dp"
Android:layout_height="12dp"
/>
<TextView
Android:id="@+id/txtloading"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Loading..."
/>
</LinearLayout>
次のように使用できます
Spinner spinner = new Spinner(this);
myContainer.addView(spinner);
スピナーで更新を呼び出して、画像を確実に再生できます。
spinner.refresh();
お役に立てば幸いです。