Resize Picture Into According To Textivew's Size
Solution 1:
You are asking for a way to calculate the exact height of a TextView
after layout so that you can adjust the size of a Bitmap for the drawableLeft
attribute.
The problem is compounded by several issues:
- If the text wraps to multi-line the height can change dramatically.
- Depending on the device hardware screen density, the rendered size
of the Bitmap will be changed, irregardless of the exact size of the
Bitmap you scale/render, so the screen density will have to be taken
into account when calculating
scaleFactor
. - Finally,
scaleFactor
does not provide an exact size image request. It only limits the size of the Bitmap to the smallest possible image that is still the same or bigger than your request in order to save memory. You will still have to resize the image to the exact height you have calculated.
The drawableLeft
method cannot overcome the problems described above and I think there is a better way to achieve your intended layout without having to resize with Java code.
I believe that you should replace your TextView with a horizontally oriented LinearLayout
containing an ImageView
and a TextView
. Set the height of the TextView to "WRAP_CONTENT"
and set the scaleType
of the ImageView to "center", like this:
android:scaleType="center"
The LinearLayout will have the height of the text in the TextView and the ImageView's scaleType
will force the Bitmap to be automatically resized during the layout. Here the reference for the available scaleTypes: ImageView.ScaleType.
Of course, you will have to adjust the layout parameters in XML for the LinearLayout, ImageView, and TextView so they are centered, justified, and oriented in the exact manner you want. But, at least you'll only have do it once.
As it appears that you will be loading a photo into the ImageView from your applications resources, you may know that the image is not very large so you can just open the Bitmap directly, or use inSampleSize = scaleFactor = 1
. Otherwise, if the image is particularly large or your get an OutOfMemoryError
exception, then calculate scaleFactor
as follows:
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
if (width > height) {
inSampleSize = Math.round((float) height / (float) reqHeight);
} else {
inSampleSize = Math.round((float) width / (float) reqWidth);
}
}
Post a Comment for "Resize Picture Into According To Textivew's Size"