I am trying to display an animated gif in an ImageView using the android Movie class in the onDraw method as follows:
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.TRANSPARENT);
super.onDraw(canvas);
long now = android.os.SystemClock.uptimeMillis();
if (movieStart == 0) {
movieStart = now;
}
movie = getMovieFromGif();
if (movie != null && movie.duration() > 0) {
try {
int relTime = (int) ((now - movieStart) % movie.duration());
movie.setTime(relTime);
float movie_height = convertDpToPixels(movie.height());
float movie_width = convertDpToPixels(movie.width());
float new_movie_height = movie_height;
float new_movie_width = movie_width;
float movie_ratio = movie_width / movie_height;
if (new_movie_width > container_width) {
new_movie_width = container_width;
new_movie_height = new_movie_width / movie_ratio;
}
if (new_movie_height > container_height) {
new_movie_height = container_height;
new_movie_width = new_movie_height * movie_ratio;
}
float scale_x = container_width / new_movie_width;
float scale_y = container_height / new_movie_height;
scale_x = new_movie_width / (float) movie.width();
scale_y = new_movie_height / (float) movie.height();
canvas.scale(scale_x, scale_y);
float x = 0;
if ((float) this.getWidth() > new_movie_width) {
x = ((this.getWidth() - (movie.width() * scale_x)) / 2f)
/ scale_x;
}
movie.draw(canvas, x, 0);
this.invalidate();
} catch (Exception ex) {
Log.i("onDraw()", "Error: " + ex.getMessage());
}
}
}
The code works fine on most devices, but on Huawei Ascend P7 and Samsung galaxy a5 the application crashes on movie.draw (canvas, x, 0) with the exception:
A / libc (23632): fatal signal 11 (SIGSEGV) at 0x00000000 (code = 1), thread 23632
Any idea what is wrong with movie.draw on these devices?
UPDATED: Below is a complete stack trace
04-29 12: 09: 24.979: D/Activity (18951): # 2 setTransGradationModeColor
04-29 12: 09: 25.049: I/Adreno-EGL (18951):: EGL 1.4 QUALCOMM build:()
04-29 12: 09: 25.049: I/Adreno-EGL (18951): OpenGL ES Shader Compiler : E031.24.02.07
04-29 12: 09: 25.049: I/Adreno-EGL (18951): : 08/06/14 Wed
04-29 12: 09: 25.049: I/Adreno-EGL (18951): : rb1
04-29 12: 09: 25.049: I/Adreno-EGL (18951): :
04-29 12: 09: 25.049: I/Adreno-EGL (18951): :
04-29 12: 09: 25.049: I/Adreno-EGL (18951): :
04-29 12: 09: 25.079: D/OpenGLRenderer (18951): 0
04-29 12: 09: 25.109: D/skia (18951): streamToByte: 30 .
04-29 12: 09: 25.109: D/skia (18951): streamToByte: Quram agif - : 10473
04-29 12: 09: 25.109: D/skia (18951): Wink AGIF Move Constructer End 9, totalTime: 2700
04-29 12: 09: 25.109: A/libc (18951): 11 (SIGSEGV) 0x00000000 ( = 1), 18951 (com.android.gif)
movie.draw(), rest - movie.draw().