설명하기가 약간 힘들지만 어쨌든 시도해보십시오.이미지 크기가 이미지에 맞게 조정됩니다.
이미지를 ImageView에 표시하면 이미지 뷰가 weight 속성을 사용하여 ScreenHeight의 50 %를 사용하도록 설정됩니다.
ImageAspectRatio가 ImageView의 비율에 맞지 않으면 ImageView의 아래쪽과 위쪽에 빈 공간이 생깁니다.
기본적으로 내 ImageView가 ScreenHeight의 50 % 인 maxSize를 갖지만 이미지의 전체 높이를 사용하지 않거나 적어도 ImageView의 맨 위로 이동하는 경우 높이를 축소해야합니다.
그래서 내가 한 것은 최대 크기로보기를 설정하고 이미지를 일반적으로 ImageView와 같은 방식으로 설정합니다. 그런 다음 ImageView를 배치 한 다음 View의 높이를 얻으십시오.
그런 다음 적용 할 스케일링을 계산합니다. 나는 이미지의 크기를 조절하고 뷰를 이전의 높이를 테두리로 가져야하므로 뷰를 내용 감싸기로 설정합니다.
이제는 CyclicoMod (Android 4.2.2)를 실행하는 Samsung GT-I9000에서도 잘 작동하며 Kindle HD에서도이 기능을 사용했습니다. 그러나 Nexus 4 (Android 4.3을 실행 중)에서 동일한 작업을 수행하면 모든 것을 무시하는 것처럼 보입니다.
내 말은, 이미지가 올바르게 확대 (53x와 같은 크기 조정 후 imageHeight)되는 것처럼 보이지만 이미지는 거의 전체 화면을 차지합니다. 왜 다른 2 대의 기기에서 작동하지만 Nexus에서는 작동하지 않습니다.
안드로이드 4.3에 대한 ImageView에 관한 새로운 API가 있습니까?
@Override
public void setImageResource(final int resId) {
// this.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0, 0.5f));
super.setImageResource(resId);
getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() {
@Override
public boolean onPreDraw() {
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resId);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int boundingY = getHeight();
int boundingX = getWidth();
float xScale = ((float) boundingX)/width;
float yScale = ((float) boundingY)/height;
float scale = (xScale <= yScale) ? xScale : yScale;
Matrix matrix = new Matrix();
matrix.postScale(scale, scale);
Bitmap scaledBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
MyImageView.this.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT));
MyImageView.super.setImageBitmap(scaledBitmap);
getViewTreeObserver().removeOnPreDrawListener(this);
return true;
}
});
}
여기에 무엇을 하려는지 /하고있는 사진이 있습니다.
은 푸른 빛을 띤 것은 이미지 뷰의 크기, 검은 사각형, 이미지의 실제 크기 고려하십시오. 파란색 크기는 ImageView의 Size를 width = matchParent로 설정하고 height = 0으로 무게를 0.5로 설정하면 얻을 수 있습니다. 이것은 ImageView가 갖길 원하는 MAX의 높이입니다.이제 Image의 너비가 ImageView의 너비보다 클 수 있습니다. 그 경우, 높이를 이미지의 높이에 맞추기 위해 이미지의 크기를 조정하고 그 경계 내에서 찾기 위해 이미지를 WrapContent로 설정하려면 이미지를 원하는 크기로 정확하게 표시하고 싶습니다.
그러나 이미지의 경우에도 가능합니다. 2 * 너비 = 높이 그 경우에는 ImageView 아무것도 할 싶지 않아요. 그냥 최대 높이를 유지하고 제공 이미지를 표시합니다.
이것은 일부 장치, GT-I9000 및 Amazon Kindle HD에서 이미 언급했듯이 작동하지만 Nexus 4에서는 폭보다 훨씬 큰 높이의 이미지가 전체 화면을 차지하는 경향이 있습니다.
디버깅하여 ImageViewHeight 및 BitmapHeight를 가져 왔습니다. 둘 다 이미지 및 ImageView 534 PX 높은 것으로 명시했다.
나는 왜 내가 다른 2 개의 장치에서 작동하지만, 넥서스에서는 작동하지 않는 이유는 모르겠다.
<include layout="@layout/own_action_bar" />
<*.view.MyImageView
android:id="@+id/drawFragment_iv"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.5"
android:adjustViewBounds="true"
android:contentDescription="@string/hello" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.5" >
something in here
<RelativeLayout/>
<LinearLayout/>
원하는 이미지를 붙여 넣을 수 있으며 무엇을 얻으려는 것인지 알 수 있습니다. –
중복 된 http://stackoverflow.com/questions/8232608/fit-image-into-imageview-keep-aspect -ratio-and-then-resize-imageview-to-image-d? rq = 1 – NitroG42
덕분에 많은 것을 보았습니다. –