그래서 사용자 정의보기의 onDraw() 메서드에서 비트 맵을 끌어 와서 애니메이션을 만듭니다. onDraw() 메서드로 그려지는 비트 맵의 위치를 변경하는 사용자 정의보기의 메서드를 호출하는 업데이트 스레드가 있습니다. 내가 뭘하고 싶은지 비트 맵을 내가 업데이 트 스레드가 끝날 때마다 내가 저장 비트 맵에서 gif를 만들 수 있도록 만들어 저장하는 것입니다. onDraw 메서드를 통해 애니메이션이 진행되는 사용자 정의보기에서 비트 맵을 저장합니다.
나는 SD 카드에 메모리에 저장된 비트 맵에서 PNG를 저장하기 위해 아래의 코드를 발견하고 그 저장된 비트 맵과 함께 작동하지만 난 getDrawingCache()에 문제가 있어요 :public void saveView(){
if(counter < 200){
try {
counter++;
System.out.println("Counter : " + counter);
File file = new File(path, "star"+counter+".png");
file.delete();
OutputStream fOut = new FileOutputStream(file);
buildDrawingCache();
getDrawingCache().compress(Bitmap.CompressFormat.PNG, 100, fOut);
destroyDrawingCache();
fOut.flush();
fOut.close();
MediaStore.Images.Media.insertImage(context.getContentResolver(),file.getAbsolutePath(),file.getName(),file.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
}
이렇게을 본질적으로 두 가지 일을합니다.
1) 약 50 개의 이미지가 필요하고 SD 카드에 저장됩니다. @ 약 50 그것은 힙이 큰 (내가 destroyDrawingCache()이 별도의 스레드에 있기 때문에 실제로 끝낼 수없는 것 같아요)
2) 촬영 한 사진에서 스캔 라인을 볼 수 있습니다 버퍼를 업데이트하는 버퍼에서 가져 오기 때문에 버퍼 업데이트.
getDrawingCache가 onDraw()를 호출하는 것처럼 보이기 때문에 onDraw 자체의 UI 스레드에서이 작업을 수행 할 수 없습니다.
가능한 경우 도움을주세요.
UI 스레드에서'saveView()가 호출 되었습니까? –
은 onDraw가 호출 될 때마다 새 스레드에 없습니다. – L7ColWinters