@Override public void bind(StickerLine data, int position, Context context) { ll.removeAllViews(); ll.setTag(TAG_KEY, data.getPackCount()); for (final Sticker s : data.getLine()) { StickerView sv; if (s != null && s.getFileReference256() != null) { sv = stickersCache.get(s.getFileReference128().getFileId()); if (sv == null) { sv = new StickerView(context); sv.setPadding(STICKER_PADDING, STICKER_PADDING, STICKER_PADDING, STICKER_PADDING); sv.bind(s.getFileReference128(), STICKER_SIZE); stickersCache.put(s.getFileReference128().getFileId(), sv); } else if (sv.isLoaded()) { if (sv.getParent() != null) { ((LinearLayout) sv.getParent()).removeView(sv); } sv.shortenFade(); } sv.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { keyboard.onStickerClicked(s); } }); ll.addView(sv, stikerlp); } } }
private void buildStickerLines(final ScrollTo scrollTo) { // BUILD SWITCH keyboard.getStickerIndicatorContainer().removeAllViews(); // Add pack switch buttons int packCount = 0; totalLines = 0; for (final StickerPackVM pack : packs.get()) { ((BaseActivity) context) .bind( pack.getStickers(), new ValueChangedListener<ArrayList<Sticker>>() { @Override public void onChanged( ArrayList<Sticker> val, Value<ArrayList<Sticker>> valueModel) { buildStickerLines(scrollTo); notifyDataSetChanged(); } }, false); if (pack.getStickers().get().size() < 1) { continue; } // Count lines int linesInPack = (int) Math.ceil((double) pack.getStickers().get().size() / stickerInLine); totalLines += linesInPack; // Build packs buttons final StickerView sv = new StickerView(context); sv.bind(pack.getStickers().get().get(0).getFileReference128(), Screen.dp(48)); sv.setPadding(padding, padding, padding, padding); sv.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { scrollTo.requestScroll(packFirstLineMap.get(pack.getId())); selectCurrentPack((Integer) sv.getTag(TAG_KEY)); } }); sv.setTag(TAG_KEY, packCount); keyboard.getStickerIndicatorContainer().addView(sv, stickerSwitchLp); packCount++; } if (stickerIndicatorContainer.getChildAt(0) != null) { stickerIndicatorContainer .getChildAt(0) .setBackgroundColor(context.getResources().getColor(R.color.selector_selected)); } // BUILD LINES // All lines stored here stickerLines = new StickerLine[totalLines]; // Fill lines with packs stickers int allLinesCount = 0; int linePackCount = 0; for (StickerPackVM pack : packs.get()) { if (pack.getStickers().get().size() < 1) { continue; } int stickerInPack = 0; int linesInPack = (int) Math.ceil((double) pack.getStickers().get().size() / stickerInLine); // Loop pack lines for (int lineInPackCount = 0; lineInPackCount < linesInPack; lineInPackCount++, allLinesCount++) { StickerLine line = new StickerLine(new Sticker[stickerInLine], linePackCount); // Remember pack first line position if (lineInPackCount == 0) { packFirstLineMap.put(pack.getId(), allLinesCount); } // Fill line with stickers for (int stickerInLine = 0; stickerInLine < this.stickerInLine; stickerInLine++, stickerInPack++) { if (stickerInPack < pack.getStickers().get().size()) { line.getLine()[stickerInLine] = pack.getStickers().get().get(stickerInPack); } else { break; } } stickerLines[allLinesCount] = line; } linePackCount++; } }