2015-04-28 21 views
5

Tôi đang phát triển một ứng dụng Android mà tôi đang cố gắng hiển thị hình ảnh GIF. Vì tôi đang sử dụng lớp Phim và tạo một lớp GIFView mở rộng Chế độ xem. Tôi nhận được một thể hiện Movie từ phương thức Movie.decodeFile.Tín hiệu lỗi Android 11 khi phim chiếu vào canvas

Tôi gặp lỗi khi Movie.draw (canvas) được gọi.

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

Có là mã có liên quan:

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

tôi tạo ra một GIFView trong chính, gọi phương thức setGIF trên để cung cấp cho nó con đường và thêm nó vào cách bố trí với tham số FillParent. Nó hoạt động khi tôi in hình ảnh này trong một ImageView. Vẽ một hình vẽ trong canvas thay vì GIF cũng hoạt động. Vì vậy, vấn đề dường như đề cập đến trường hợp Phim.

tôi đã sử dụng những liên kết này để làm cho GIFView http://weavora.com/blog/2012/02/07/android-and-how-to-use-animated-gifs/

Tôi cũng đã cố gắng nó theo cách này nhưng cùng một lỗi trên movie.draw Info about the Movie class for Android

EDIT1: tôi làm các xét nghiệm của tôi trên một Oppo Tìm 7a trên Android 4.4.2/snapdragon 801/2GB Thay đổi movie.draw (canvas, 10, 10) thành movie.draw (canvas, 10f, 10f) không thay đổi bất kỳ thứ gì.

EDIT2: tôi chỉ thử nghiệm trên một thiết bị ZTE cũ với Android 2.3.5 và nó làm việc .. Vì vậy, cái gì là sai khi khởi chạy trên thiết bị Find7a nhưng tôi không thể tìm ra những gì :(

+0

Tôi không biết các giải pháp, nhưng tôi có một số câu hỏi về vấn đề này: Chúng ta có biết điều gì đó về môi trường chạy của bạn? Bạn có kiểm tra nó trên Emulator, hoặc điện thoại? Tôi cũng thấy rằng movie.draw chờ phao thay vì int. Bạn đã thử với số phao chưa? như: movie.draw (canvas, 10f, 10f); – kisstajmi

+0

Tôi thực hiện các thử nghiệm trên Oppo Find 7a trên Android 4.4.2/snapdragon 801/2GB và thay đổi movie.draw (canvas, 10, 10) thành movie.draw (canvas, 10f, 10f) không thay đổi gì cả. – Vrong

+0

Có thể có sự cố với hệ điều hành hoặc thiết bị chính xác. Hãy thử nó trong Emulator nếu có thể. Bạn cũng có thể tìm kiếm các sự cố cụ thể của thiết bị. – kisstajmi

Trả lời

5
!

CUỐI CÙNG tôi tìm thấy câu trả lời, nó xuất hiện rằng trên một số phiên bản hoặc các thiết bị Android phần cứng tăng tốc cần phải được vô hiệu hóa
tôi chỉ cần thêm này này để biểu hiện của tôi:.

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

Mor e thông tin về việc sử dụng bật/tắt tăng tốc phần cứng có thể được tìm thấy here.

5

Tôi đã tìm thấy giải pháp khác - bạn phải tắt trình tăng tốc phần cứng chỉ trên chế độ xem cụ thể này mà bạn vẽ phim. Sử dụng dòng tiếp theo:

view.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

Reference (chế độ xem) https://developer.android.com/guide/topics/graphics/hardware-accel.html#controlling

+0

Điều này 1 làm việc cho tôi. – Braj

+0

Dude cảm ơn. Trái tim tôi bỏ qua một nhịp khi tôi chạy ứng dụng của tôi trong kẹo que lần đầu tiên. –

Các vấn đề liên quan