android에서 ImageView에서 Bitmap 이미지를 완벽하게 채우기

어떤 사람은 우리가 ImageView의 scaleType로 모든 문제를 완벽하게 해결할 수 있다고 말하지만, 실험을 해 보면 문제가 있을 수 있다는 것을 알게 될 것이다.
질문 1: 너무 큰 비트맵.ImageView에 (2000+)*(4000+)의 천만 픽셀 정도의 그림을 채우면 ImageView가 표시되지 않고 검은색 화면으로 바뀝니다.
문제2: 너무 작은 그림은 화면의 공간을 충분히 이용하기 위해 작은 그림을 가능한 한 확대해야 한다.우리가 해야 할 일은 그림을 비례에 따라 축소/확대하여 길이나 너비 중 하나가 ImageView의 길이나 너비보다 작게 하는 것이다.
다음 두 가지 문제를 해결하기 위해 다음을 수행합니다.
CENTER /center        size    ,    /   View  / ,            

CENTER_CROP / centerCrop size , ( ) View ( )

CENTER_INSIDE / centerInside , size / View /

FIT_CENTER / fitCenter / View ,

FIT_END / fitEnd / View , View

FIT_START / fitStart / View , View

FIT_XY / fitXY  / View

MATRIX / matrix

그 중
center: 화면 비율과 맞지 않는 그림은 캡처되기 때문에 안 됩니다.
centerCrop: 동상.
centerInside: 작은 그림을 확대할 수 없습니다. 그리고 필자는 장치의 길이와 비례가 일치하는 그림을 놓을 때 검은 변이 생겼습니다. 테스트에서 비트맵이 전체 ImageView를 덮어쓰지 않았다는 것을 발견했습니다.
fitCenter: 문제1은 해결할 수 없지만 우리가 요구하는 효과에 가장 가까운 것 같지만 마찬가지로 테스트할 때 검은 테두리를 발견했다.
fitEnd/fitStart: 이 두 개의 중간에 있지 않은 것은 토론하지 않겠습니다.
matrix: 이것은 우리가 비례에 따라 확대/축소하는 요구를 만족시킬 수 없습니다.
검은색 테두리 때문에 저는 ImageView의 자동 축소 기능을 완전히 신뢰할 수 없습니다. 마지막으로 필자는 비트맵의 사이즈를 수동으로 조정하는 +ScaleType=센터를 선택했습니다. (축소는 지원되지 않지만 우리는 이미 수동으로 축소를 끝냈습니다) 해결했습니다.
주요 사항:
1. 세로로 가로로 된 그림을 보여주려면 축소 처리를 해야 한다. 마찬가지로 너무 큰 그림은 길이와 폭이 설비의 길이보다 작을 때까지 축소할 것을 요구한다.
2. 반대로 너무 작은 그림에 대해 우리는 그것을 길이나 너비의 하나가 설비의 길이와 같을 때까지 확대할 것을 요구한다.
3. XML에서 ImageView의 scaleType = "center"정의
키 코드:
private void createScaledBitmap(){
		DisplayMetrics dm = new DisplayMetrics();
		getWindowManager().getDefaultDisplay().getMetrics(dm);
		int width = dm.widthPixels+1;
		int height = dm.heightPixels+1;
		int t_width;
		int t_height;
		if (bitmap.getWidth()>width || bitmap.getHeight()>height){
			t_width = width;
			t_height = bitmap.getHeight()*width/bitmap.getWidth();
			if (t_height>height){
				t_width = t_width*height/t_height;
				t_height = height;
			}
		} else
		if (bitmap.getWidth()height){
				t_width = t_width*height/t_height;
				t_height = height;
			}
		} else {
			t_width = bitmap.getWidth();
			t_height = bitmap.getHeight();
		}
		bitmap = Bitmap.createScaledBitmap(bitmap, t_width, t_height, true);
	}

좋은 웹페이지 즐겨찾기