2017-10-09 4 views
0

Je suis this tutoriel pour montrer des cartes et intégrer la fonctionnalité de balayage Tinder-like.Comment montrer des publicités contenant CardView de manière aléatoire mais pas avant 3 cartes et pas après 7 cartes?

En entre la cards Je veux montrer des annonces et que j'utilise AdMob.

Voici le code:

@Layout(R.layout.ad_cards_view) 
public class AdCards { 

    @View(R.id.adView) 
    NativeExpressAdView nativeExpressAdView; 

    private Context mContext; 
    private SwipePlaceHolderView mSwipeView; 

    public AdCards (Context context, SwipePlaceHolderView swipePlaceHolderView) { 
     mContext = context; 
     mSwipeView = swipePlaceHolderView; 
    } 

    @Resolve 
    private void onResolved() { 
     AdRequest request = new AdRequest.Builder() 
       .addTestDevice("***") 
       .addTestDevice("***") 
       .build(); 
     nativeExpressAdView.setVideoOptions(new VideoOptions.Builder() 
         .setStartMuted(true) 
       .build()); 
     nativeExpressAdView.loadAd(request); 
    } 

} 

est ici ad_cards_view.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:ads="http://schemas.android.com/apk/res-auto" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:layout_width="350dp" 
    android:layout_height="395dp" 
    android:layout_gravity="center" 
    android:layout_marginTop="35dp"> 

    <android.support.v7.widget.CardView 
     android:orientation="vertical" 
     android:background="@android:color/white" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_centerHorizontal="true" 
     android:layout_margin="10dp" 
     app:cardCornerRadius="7dp" 
     app:cardElevation="4dp"> 

    <com.google.android.gms.ads.NativeExpressAdView 
     android:id="@+id/adView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     ads:adUnitId="ca-app-pub-xxx" 
     ads:adSize="320x300"> 
    </com.google.android.gms.ads.NativeExpressAdView> 

    </android.support.v7.widget.CardView> 

</RelativeLayout> 

Maintenant, je veux montrer ces cartes au hasard dans la pile, mais pas avant 3 cartes et non au bout de 7 cartes.

Voici ce que j'ai essayé:

rand = new Random(); 
random = rand.nextInt(8-3) + 3; 
count = rand.nextInt(8-3) + 3; 

mSwipeView.addView(new Cards(mContext, profile, mSwipeView)); 
if (count >= random) { 
    mSwipeView.addView(new AdCards(mContext, mSwipeView)); 
    random = rand.nextInt(8-3) + 3; 
    count = rand.nextInt(8-3) + 3; 
} 

si ce code montre les cartes contenant des annonces au hasard, mais il ne montre pas en fonction de mes besoins et cette carte apparaît même après le 1er carte.

Comment puis-je m'assurer que cette carte contenant une annonce apparaît de manière aléatoire mais pas avant 3 cartes et pas après 7 cartes.

+0

Si je comprends bien votre question, vous voulez un nombre compris entre 3 et 7 (3 étant le minimum et 7 étant le maximum). Selon ma réponse, [ici] (https://stackoverflow.com/a/21049922/2649012), la formule serait: 'final int random = Random.nextInt ((7 - 3) + 1) + 3;' ou simplifié pour la vitesse (un ajout de moins à exécuter): 'final int random = Random.nextInt ((4) + 1) + 3;' –

+0

@ModularSynth J'ai obtenu comment obtenir les nombres aléatoires dans la gamme de 3 à 7. Qu'est-ce que? Je veux savoir est l'algorithme que je devrais utiliser pour montrer 'mSwipeView.addView (nouvelles AdCards (mContext, mSwipeView))' aléatoirement pas avant 3 cartes et pas après 7 cartes comme indiqué dans la question. J'espère que tu l'as eu. –

+0

Ensuite, vous ne demandez pas la logique nextInt. Vous demandez comment gérer le contrôle personnalisé SwipeView pour suivre la logique que vous recherchez. Mais je ne sais rien de ce TinderSwipe. –

Répondre

0

Si vous connaissez les cartes à mettre d'avant alors ce que vous pouvez faire est 1. créer une pile de cartes 2. Mettez d'abord deux non-add-cartes 3. Ensuite, faire un test aléatoire si elle doit mettre une carte additionnelle pour le troisième sinon mettre la carte sans addition. 4. faites cette carte avec test jusqu'à 7 cartes.

Exemple:

boolean atLeastOneAddPut = false; 

int count = 1; 
for(Data data: DataArray){ 
    if(count > 2 && count < 8 && shouldPutAdd()){ 
     mSwipeView.add(new AddView()); 
     count++; 
    } 
    mSwipeView.add(new NonAddView(data)); 
    count++; 
} 

private boolean shouldPutAdd(){ 
    //generate random 0 and 1 
    int random; 
    ... 
    return random == 1; 
} 
+0

cela arrêterait de montrer adView lorsque le nombre augmente 7. Je veux montrer des publicités au hasard juste avant toutes les 3 cartes normales et pas après toutes les 7 cartes normales. –

+0

Référez-vous à: https://github.com/janishar/Tutorials/tree/master/RandomPromotionalCards –