사용자가 손가락으로 화면에 그릴 수있는 그리기 앱이 있습니다. 그리기는 화면 외부 비트 맵에 발생하고 onDraw()에서 화면에 게시됩니다.Android : 복원 된 캔버스 기반 비트 맵 악화?
사용자가 전화를 걸거나 집으로 돌아가서 집으로 돌아가서 앱으로 돌아 오면 그림 가장자리에 아티팩트가있는 것을 제외하고는 이전 그림과 함께 그리기 화면이 표시됩니다. 여러 개의 집 -> 이력서 -> 집 -> 다시 시작주기를 순환하면 매번 아티팩트가 악화됩니다. 5 사이클 후 결과에 대한 첨부 된 이미지를 참조하십시오.
이전에 본 사람이 있습니까? 왜 이런 일이 일어나는 지 아십니까?
감사
원래 그림 :
5 후 사이클 :
편집 : 추가 사항 : 사용자로
는 scre에 닿을 en, 나는 터치를 가로 채고 OffScreen Bitmap에 경로로 저장합니다, mBitmap. 패스는 Paint.ANTI_ALIAS_FLAG 플래그가 유효한 Paint로 묘화됩니다. 의 onDraw()에서, 나는 통해 화면에 기록 :
@Override
protected void onDraw(Canvas canvas) {
// wipe the canvas
canvas.drawColor(0xffffffff);
// draw the stored paths
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
// draw any active paths
if (mStrokePath != null) {
canvas.drawPath(mStrokePath, mStrokePaint);
}
}
mBitmapPaint는 다음과 같이 정의된다
:
mBitmapPaint = new Paint(Paint.DITHER_FLAG);
편집 2 : 좋아, 그것은
내 문제가 있었다 알아 냈있어 Canvas 기반 뷰를 생성하는 Activity에 대한 onResume에서 이미 셰이프가있는 복원 된 Bitmap의 캔버스에 셰이프를 다시로드 했으므로 앤티 앨리어싱이 저하되었습니다.
비트 맵 디스플레이 작동 방식에 대한 자세한 정보를 제공 할 수 있습니까? 동일한 비트 맵을 여러 번 저장하고 있습니까? –
나는 그렇게 믿지 않는다 ... 사용자가 그림을 그릴 때, 나는 그 데이터를 오프 스크린 birmap에 기록한 다음 onDraw() 캔버스에 기록한다.drawBitmap (mBitmap, 0, 0, mBitmapPaint); 활동이 복원되면 onDraw에 대한 단일 호출이 발생하며 offscrren 비트 맵을 변경하는 데는 아무 것도 수행되지 않습니다. –