我有一个卡片视图,其ImageView对齐到左下角。
我得到ImageView的高度并将其设置为位图的高度。
iv.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int height = iv.getMeasuredHeight();
Paint widthPaint = new Paint();
widthPaint.setTextSize(200f);
float width = widthPaint.measureText(text);
Bitmap bmOverlay = Bitmap.createBitmap((int) width + S.dpToPx(ctx, 20), height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bmOverlay);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setStyle(Paint.Style.FILL);
canvas.drawColor(Color.argb(220, 244, 244, 244));
paint.setColor(Color.TRANSPARENT);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
paint.setTextSize(200f);
paint.setTextAlign(Paint.Align.CENTER);
canvas.drawText(text, canvas.getWidth() / 2, (canvas.getHeight() / 2) - ((paint.descent() + paint.ascent()) / 2), paint);
iv.setImageBitmap(bmOverlay);
}
});
iv.getMeasuredHeight();
和bmOverlay.getHeight()
的输出均为120.但位图未覆盖ImageView。我不明白为什么。
ImageView的XML。
<ImageView
android:id="@+id/rquiz_iv_topic"
android:layout_width="80dp"
android:layout_height="40dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"/>
答案 0 :(得分:0)
在你的imageview中设置scaleType =&#34; centerInside&#34;和adjustViewBounds =&#34; true&#34;。
<ImageView
android:id="@+id/rquiz_iv_topic"
android:layout_width="80dp"
android:layout_height="40dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:adjustViewBounds="true"
android:scaleType="centerInside"
/>
请参阅更多详情ImageView.ScaleType
答案 1 :(得分:0)
您要归档的内容:使用位图设置ImageView的大小是错误的。
您需要适合所有手机屏幕,而不是按像素查看设置。
您可以:
<强> 1。尊重家长的方式:
将ImageView
放入LinearLayout
,将权重设为0.5
(表示适合LinearLayout
的50%),并将相关(垂直或水平)高度或宽度设置为{{1} (让0dp
处理大小)。
并且,将图像比例设置为Layout Manager
/ fitXY
。(或者您可以尝试其他缩放)
2. 尊重位图方式:
将centerCrop
放在ImageView
中,将其他附近的观看次数设置为RelativeLayout
/ ImageView
等layout_alignBottom
并设置layout_alignLeft
高度和/或宽度为ImageView
,让布局处理大小。