即使设置为相同的值,位图高度也不匹配ImageView高度

时间:2016-11-21 06:47:29

标签: android bitmap

我有一个卡片视图,其ImageView对齐到左下角。

enter image description here

我得到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"/>

2 个答案:

答案 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 / ImageViewlayout_alignBottom并设置layout_alignLeft高度和/或宽度为ImageView,让布局处理大小。