Ich entwickle eine Android-Anwendung, in der ich versuche, ein GIF-Bild anzuzeigen. Dafür verwende ich die Movie-Klasse und erstellt eine Klasse GIFView, die Ansicht erweitert. Ich erhalte eine Movie-Instanz von der Movie.decodeFile-Methode.Android Fehlersignal 11, wenn ein Film in eine Leinwand zeichnet
Ich erhalte einen Fehler, wenn Movie.draw (Canvas) aufgerufen wird.
04-28 13:44:18.001: A/libc(24883): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 24883 (mple.channel002)
Es ist der betreffende Code:
public void setGif(File gif)
{
movie = Movie.decodeFile(gif.getAbsolutePath());
}
@Override
public void draw(Canvas canvas) {
// TODO Auto-generated method stub
super.draw(canvas);
canvas.drawColor(0xFFCC3C6C);
if(movie != null)
{
if(movieStart == 0)
movieStart = android.os.SystemClock.uptimeMillis();
int duration = Math.max(movie.duration(), 1000);
movie.setTime((int)(duration - ((android.os.SystemClock.uptimeMillis() - movieStart)%duration)));
movie.draw(canvas, 10, 10);//TODO CRASH
invalidate();
}
}
ich eine GIFView im Haupt erstellen, rufen Sie über setGIF Methode den Weg zu geben und sie in das Layout mit FillParent Parameter hinzuzufügen. Es funktioniert, wenn ich dieses Bild in einem ImageView drucke. Das Zeichnen eines Zeichenbereichs in der Zeichenfläche anstelle des GIF funktioniert auch. Also scheint das Problem mit der Movie-Instanz zu tun zu haben.
benutzen ich diese Links die GIFView zu machen http://weavora.com/blog/2012/02/07/android-and-how-to-use-animated-gifs/
ich es auf diese Weise auch versucht, aber gleichen Fehler auf movie.draw Info about the Movie class for Android
EDIT1: ich meine Tests auf einem Oppo 7a Auf Android 4.4.2/snapdragon 801/2GB Das Ändern von movie.draw (Leinwand, 10, 10) in movie.draw (Leinwand, 10f, 10f) ändert nichts.
EDIT2: ich nur getestet auf einem alten ZTE-Gerät mit Android 2.3.5 und es funktionierte .. So etwas falsch ist, wenn sie auf Find7a Gerät starten, aber ich kann nicht herausfinden, was :(
Ich weiß nicht die Lösung, aber ich habe einige Fragen über das Problem: Haben wir etwas über Ihre Laufzeitumgebung wissen? Teste du es auf Emulator oder Telefon? Ich sah auch, dass movie.draw auf float statt int wartet. Hast du es mit Floaten versucht? wie: movie.draw (Leinwand, 10f, 10f); – kisstajmi
Ich mache meine Tests auf einem Oppo Find 7a auf Android 4.4.2/Snapdragon 801/2GB und die Änderung von movie.draw (Leinwand, 10, 10) zu movie.draw (Leinwand, 10f, 10f) ändert nichts. – Vrong
Vielleicht gibt es ein Problem mit dem Betriebssystem oder dem genauen Gerät. Bitte versuchen Sie es im Emulator, wenn es möglich ist. Sie können auch nach gerätespezifischen Problemen suchen. – kisstajmi