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ì :(
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
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
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