2016-11-21 9 views
0

ImageViewが左下に整列したcardviewがあります。ビットマップの高さが一致しません同じ値に設定されていても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"/> 
+0

android:scale_type = "fitxy" – HourGlass

+0

私はスケールタイプがあなたの将来のお手伝いになるので、あなたのレイアウトコードより先に進むことができます –

答えて

0

あなたの画像ビューでは、scaleType = "centerInside"とadjustViewBounds = "true"です。

 <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

+0

これはスケーリングの方法です。しかし、ビットマップの高さとイメージビューの高さが同じスケーリングである必要はなぜですか? – suku

+0

私はあなたの答えを理解しています...私の主張はスケーリングを望まなかったので、私はイメージビューのビットマップの高さを作りました。スケーリングなしでは正しく動作しません。 – suku

0

のために参照してください。設定ImageViewのを正確にサイズのビットマップで何か間違っています。

ピクセル単位で表示する設定ではなく、電話機の画面全体を調整する必要があります。

することはでき:

1.尊重親ウェイ: (手段はLinearLayoutの50%をフィット)0.5として、LinearLayoutに設定された重みをImageViewを入れて、セット関連(垂直または水平)身長や幅を0dpに設定します(サイズを処理するにはLayout Managerを使用します)。 。

そして、あなたのイメージのスケールがfitXY/centerCropに設定(または、あなたが他のスケーリングを試すことができます)

2. ビットマップウェイを尊重: RelativeLayoutImageViewを入れて、によってImageViewに立つために、他の近くのビューを設定しますlayout_alignBottom/layout_alignLeftなどです。の高さまたは幅をwrap_contentに設定して、レイアウトでサイズを処理させます。

関連する問題