BitmapDrawable неправильно масштабируется в LayerDrawable
Я работаю над игрой в блэкджек. Я пытаюсь отобразить руку игрока, используя layerdrawable. Тем не менее, изображения карты не масштабируются правильно. Они слишком широки. Я поставил свой код ниже. По сути, я помещаю растровое изображение в BitmapDrawable, который я устанавливаю внутри LayerDrawable, в ImageView, и размеры BitmapDrawable, похоже, искажаются, как только я помещаю его в LayerDrawable.
Я попытался настроить ViewViewBounds в паре с установкой максимальной ширины / высоты, изменяя гравитацию (делает изображение крошечным - возможно, что-то не так, когда я загружал изображение) и устанавливая границы безрезультатно.
Спасибо за любую помощь, которую вы можете предоставить.
XML-файл макета:
<ImageView
android:id="@+id/playerHand"
android:contentDescription="@string/playerHand"
android:adjustViewBounds="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxWidth="@dimen/lHandWidth"
android:maxHeight="@dimen/lHandHeight"
android:scaleType="centerInside"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_marginBottom="220dp"
android:layout_marginLeft="150dp"
android:src="@drawable/first_hand" />
first_hand.xml:
<item
android:id="@+id/fh_1" >
<bitmap android:src="@drawable/card_empty"
android:gravity="center"/>
</item>
<item
android:left="@dimen/lCardOffsetOne"
android:id="@+id/fh_2" >
<bitmap android:src="@drawable/card_empty"
android:gravity="center"/>
</item>
Код:
private void deal(Card aCard, int cardIndex, boolean player)
{
LayerDrawable theHand = null;
ImageView ldView = null;
//Unrelated code
ldView = (ImageView) findView(R.id.playerHand, "Player hand");
theHand = (LayerDrawable) ldView.getDrawable();
//Unrelated code
final int cardOffset = (int) getResources().getDimension(R.dimen.lCardOffsetOne);
/*cardWidth is calculated, using the aspect ratio, from a card height of 100dp
(a constant stored in my R.dimens file),*/
if (!terminalCard)
ldView.setMaxWidth(cardWidth + cardOffset * cardIndex);
else
ldView.setMaxWidth(cardWidth + cardOffset * (MAX_HAND_SIZE -1));
Bitmap aBitmap = GraphicsLoader.getBitmap(aCard);
Log.v("deal(card, int,boolean)", "Loaded card bitmap: height = " +
aBitmap.getHeight() + ", width = "
+ aBitmap.getWidth() );
//This lists height 259, width 208, which is the correct aspect ratio.
BitmapDrawable thing = new BitmapDrawable(getResources(), aBitmap);
//thing.setGravity(Gravity.LEFT);
// Makes it tiny and doesn't change the bounds
final int resourceIDOfLayer;
if (terminalCard)
resourceIDOfLayer = theHand.getId(MAX_HAND_SIZE);
else resourceIDOfLayer = theHand.getId(cardIndex);
if (!theHand.setDrawableByLayerId(resourceIDOfLayer, thing))
System.err.println("Failed to replace graphic of " + resourceIDOfLayer);
Rect aRect = theHand.getDrawable(cardIndex).getBounds();
System.out.println("After I place the BMDrawable in the LD, its bounds are: Height = " + aRect.height() +
", width is " + aRect.width() );
// The above line lists large and disproportionate bounds (height 519, varying width)
// I set the max height of the ImageView to 100dp.
ldView.setImageDrawable(theHand);
ldView.requestLayout(); // ?? Needed because I changed the max width?
ldView.invalidate();
//Other code
}