Android - изображения перекрытия (игральные карты) - PullRequest
6 голосов
/ 27 октября 2011

Я пытаюсь сделать так, чтобы игральные карты в моей игре перекрывались так, чтобы была видна только первая половина карты, а другая половина была покрыта следующей игральной картой. Единственная карта, которая должна быть полностью видимой, будет последней / самой правой картой.

Я использовал следующий код как с Framelayout, так и относительным Layout, но безрезультатно. Кто-нибудь может предложить несколько предложений?

public int shouldShow(int numberOfCards, int card, int id)
{
    if(card == -1)
        hide(id);
    else
    {
        findViewById(id).setBackgroundDrawable(deckimages[card]);
        //findViewById(id).offsetLeftAndRight(findViewById(id).getWidth()* numberOfCards / 2);
        show(id);
        //findViewById(id).setPadding(findViewById(id).getWidth()* numberOfCards / 2, 0,0,0);
        return numberOfCards+1;
    }
    return numberOfCards;
}

Я пытался использовать методы padding и offset, ни один из которых не работает для меня. но я также заметил, что методы getwidth () и getmeasuredwidth () возвращают 0.

какие-либо предложения о том, какой макет мне следует использовать и почему не работают функции getwidth?

код xml ниже ... будет больше изображений, чем это, но это то, что я тестировал

<RelativeLayout android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/RelativeLayout1">
            <ImageView android:id="@+id/imageView2" android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView>
            <ImageView android:id="@+id/imageView3" android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView>
        </RelativeLayout>

Ответы [ 2 ]

8 голосов
/ 05 февраля 2013

Я застрял на этом целую вечность и после 4 часов возился с кодом и поиском в Google.Я наконец-то нашел решение, и оно довольно простое.

Все, что вам нужно сделать, это выровнять следующую карту сверху и слева от предыдущей карты.Это сделает так, что вторая карта будет помещена сверху карты раньше.Затем установите leftMargin, чтобы «толкнуть» карту сверху вправо, создавая эффект частичного перекрытия.

Вот мой код (сделано программно):

for(int i=0; i<hand.size();i++){
        int c = hand.get(i).getCardResource();
        ib = new ImageButton(this);
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        params.addRule(RelativeLayout.ALIGN_TOP, i-1);
        params.addRule(RelativeLayout.ALIGN_LEFT,i-1);
        params.leftMargin= 40;
        ib.setImageResource(c);
        ib.setClickable(true);
        ib.setPadding( 3, 3, 3, 3);
        ib.setId(i);    
        ib.setLayoutParams(params);
        ll.addView(ib);

    }
1 голос
/ 27 октября 2011

Вы можете предоставить границы просмотра, намеренно не соответствующие размеру изображения, и использовать ScaleType для просмотра изображений: http://developer.android.com/reference/android/widget/ImageView.ScaleType.html. Например, android:scaleType="fitStart"

...