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
   }

0 ответов

Другие вопросы по тегам