2015-04-28 21 views
5

GIF görüntüsünü görüntülemeye çalıştığım bir Android uygulaması geliştiriyorum. Bunun için Movie sınıfını kullanıyorum ve View'u genişleten bir sınıf GIFView oluşturdum. Movie.decodeFile yönteminden bir Movie örneği alıyorum.Bir film tuvali çizdiğinde Android 11 hata sinyali

Movie.draw (tuval) çağrıldığında bir hata alıyorum.

04-28 13:44:18.001: A/libc(24883): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 24883 (mple.channel002) 

ilgili kod vardır:

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

Ben ana bir GifView oluşturmak, bunu yolunu verip FillParent parametresi ile düzeni eklemek için yukarıdaki setGIF yöntemini çağırın. Bu resmi bir ImageView uygulamasında yazdırdığımda çalışır. GIF yerine tuvalde çizilebilir çizim de çalışır. Yani sorun, Film örneğiyle ilgileniyor gibi görünüyor. Ben de bunu movie.draw bu kaba ama aynı hatayı çalıştı http://weavora.com/blog/2012/02/07/android-and-how-to-use-animated-gifs/

Ben GifView yapmak için bu bağlantıları kullanılan Info about the Movie class for Android

Edit1: Bir Oppo benim testler üzerinde 7a bul do Android 4.4.2/snapdragon 801/2GB movie.draw (canvas, 10, 10) film.draw (canvas, 10f, 10f) olarak değiştirilemiyor.

EDIT2: Sadece Android 2.3.5 ile eski ZTE cihaz üzerinde test ve Find7a cihazda başlatırken Yani bir şey yanlış .. çalıştı ama neyin :(

+0

Ben çözüm bilmiyorum ama sorun hakkında bazı sorular var: biz zamanı ortamına hakkında bir şeyler biliyor musunuz sonraki satır kullanın? Emulator veya telefondan test ediyor musunuz? Ayrıca film.draw'in int yerine float için beklediğini gördüm. Float numaraları ile denediniz mi? benzeri: movie.draw (kanvas, 10f, 10f); – kisstajmi

+0

Testlerimi Android 4.4.2/snapdragon 801/2GB üzerinde bir Oppo Find 7a üzerinde yapıyorum ve movie.draw (canvas, 10, 10) film.draw (canvas, 10f, 10f) olarak değiştirilemiyor. – Vrong

+0

Belki de işletim sisteminde veya tam aygıtta bir sorun var. Mümkünse lütfen Emulator'de deneyin. Ayrıca aygıta özgü sorunları da arayabilirsiniz. – kisstajmi

cevap

5
çözemiyorum ! Ben cevap buldu

NİHAYET , bazı Android sürümü veya cihazları donanım üzerinde hızlandırma devre dışı gerektiğini görünür
Ben sadece beyannamesine bu eklendi.

<application android:hardwareAccelerated="true" ...> 

Mor Donanım hızlandırmayı etkinleştirme/devre dışı bırakmayı kullanma hakkında bilgi here bulunabilir.

5

Başka bir çözüm buldum - yalnızca film hızlandırdığınız bu görünümde donanım hızlandırıcısını devre dışı bırakmanız gerekiyor.

view.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

Referans (görünüm seviyesi) https://developer.android.com/guide/topics/graphics/hardware-accel.html#controlling

+0

Bu 1 benim için çalıştı. – Braj

+0

Dude teşekkürler. Uygulamamı ilk kez lolipopda çalıştırdığımda kalbim atladı. –

İlgili konular