Bene, penso di poterti fornire esempi di codice ... Prima di tutto, ho aggiunto AsymmetricGridView.
compile 'com.felipecsl.asymmetricgridview:library:2.0.1'
Io uso this guide. Si è scoperto su un tale adattatore aggiunta:
ListAdapter ia = new PreviewsAdapter(mContext, currentPreviews).setAdsWidth(numRows);
gridListView.setRequestedColumnWidth(Utils.dpToPx(mContext, 80));
gridListView.setAllowReordering(true);
AsymmetricGridViewAdapter asymmetricAdapter =
new AsymmetricGridViewAdapter<>(mContext, gridListView, ia);
gridListView.setAdapter(asymmetricAdapter);
gridListView.setOnItemClickListener(gridviewOnItemClickListener);
Prestare attenzione alla numRows. Prima di aggiungere una vista fisica non sappiamo quanto avremo colonne. E non possiamo sapere quante celle (ampie) pubblicizzano. È possibile che tu sia in grado di utilizzare il metodo standard AsymmetricGridView.
Ho dovuto usare questo codice terribile ( In esso intasato le mie costanti.
Display display = mContext.getWindowManager().getDefaultDisplay();
Point size = new Point();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2){
display.getSize(size);
} else {
size.set(display.getWidth(), display.getHeight());
}
final int mSize;
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
mSize = Math.min(size.x, size.y);
} else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
mSize = Math.max(size.x, size.y) - Math.min(size.x, size.y);
} else {
mSize = Math.min(size.x, size.y);
}
int numRows = Math.round((float) mSize/(float) Utils.dpToPx(mContext, 100));
// 80 width cell item + 20 padding
Tutta la magia l'adattatore PreviewsAdapter estende BaseAdapter
Determinare dove non è la pubblicità. Voglio in the middle
adsId = currentPreviews.size()/2;
Forgia un numero di voci. Le nostre voci nums + annuncio
public int getCount() {
return currentPreviews.size() + 1;
}
Ora restituiremo l'oggetto. Sono nostri membri o pubblicità.
public Object getItem(int position) {
if(adsId != position) {
if(position >= adsId) {
position-=1;
}
return currentPreviews.get(position);
} else {
return new AdsItem(this.numRows, 1);
}
}
Il nostro oggetto deve implementare AsymmetricItem. Pubblicità, anche. Ecco un esempio della pubblicità delle classi di oggetti.
public class AdsItem implements AsymmetricItem {
private final int width;
private final int height;
public AdsItem(int adsWidth, int adsHeight) {
width = adsWidth;
height = adsHeight;
}
@Override
public int getColumnSpan() {
return width;
}
@Override
public int getRowSpan() {
return height;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
}
}
getRowSpan, getColumnSpan determinare la larghezza e l'altezza dell'oggetto Visualizza nelle celle.
E qui è il metodo per ottenere Vista:
public View getView(int position, View convertView, ViewGroup parent) {
if(adsId != position) {
ImageView imageView;
if (convertView == null) {
imageView = new SquareImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(GridView.LayoutParams.MATCH_PARENT, GridView.LayoutParams.MATCH_PARENT));
imageView.setPadding(10, 10, 10, 10);
} else {
imageView = (SquareImageView) convertView;
}
AvatarPart ap = (AvatarPart) getItem(position);
Bitmap b = imgs.get(ap.getFile());
imageView.setImageBitmap(b);
imageView.invalidate();
return imageView;
} else {
String adId = mContext.getResources().getString(R.string.add_id);
AdView mAdView = new AdView(mContext);
mAdView.setPadding(0, 15, 0, 15);
mAdView.setAdSize(AdSize.BANNER);
mAdView.setAdUnitId(adId);
AdRequest adRequest = new AdRequest.Builder()
.build();
if(mAdView.getAdSize() != null)
mAdView.loadAd(adRequest);
return mAdView;
}
}
Ma io non sono sicuro di questa linea:
imageView = (SquareImageView) convertView;
Io non so se ci si arriva AdView. Ma mentre non è rotto: D
Per gestire i clic dovevano scrivere un altro metodo.
public AvatarPart getItemWithoutAds(int position) {
if(position == adsId) return null;
if(position >= adsId) {
position-=1;
}
return currentPreviews.get(position);
}
Questo non è certamente il codice più bello, ma funziona. Risultato:
non sarà presente solo mostra in una cella anziché tratto da lato a lato come nell'immagine sopra? – Pankaj
puoi chiarire di più. Adview è possibile impostare la larghezza e l'altezza – virendrao
se si guarda l'immagine si vedrà una barra intitolata immagine. Questo è ciò di cui sto parlando. Come faccio a mostrare quell'annuncio tra gli annunci normali. – Pankaj