package com.lqr.emoji; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.RelativeLayout; /** * CSDN_LQR * 贴图适配器 */ public class StickerAdapter extends BaseAdapter { private Context mContext; private StickerCategory mCategory; private int startIndex; private int mEmotionLayoutWidth; private int mEmotionLayoutHeight; private float mPerWidth; private float mPerHeight; private float mIvSize; public StickerAdapter(Context context, StickerCategory category, int emotionLayoutWidth, int emotionLayoutHeight, int startIndex) { mContext = context; mCategory = category; this.startIndex = startIndex; mEmotionLayoutWidth = emotionLayoutWidth; mEmotionLayoutHeight = emotionLayoutHeight - LQREmotionKit.dip2px(35 + 26 + 50);//减去底部的tab高度、小圆点的高度才是viewpager的高度,再减少30dp是让表情整体的顶部和底部有个外间距 mPerWidth = mEmotionLayoutWidth * 1f / EmotionLayout.STICKER_COLUMNS; mPerHeight = mEmotionLayoutHeight * 1f / EmotionLayout.STICKER_ROWS; float ivWidth = mPerWidth * .8f; float ivHeight = mPerHeight * .8f; mIvSize = Math.min(ivWidth, ivHeight); } @Override public int getCount() { int count = mCategory.getStickers().size() - startIndex; count = Math.min(count, EmotionLayout.STICKER_PER_PAGE); return count; } @Override public Object getItem(int position) { return mCategory.getStickers().get(startIndex + position); } @Override public long getItemId(int position) { return startIndex + position; } @Override public View getView(int position, View convertView, ViewGroup parent) { StickerViewHolder viewHolder; if (convertView == null) { RelativeLayout rl = new RelativeLayout(mContext); rl.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, (int) mPerHeight)); ImageView imageView = new ImageView(mContext); imageView.setImageResource(R.drawable.ic_tab_emoji); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); params.width = (int) mIvSize; params.height = (int) mIvSize; params.addRule(RelativeLayout.CENTER_IN_PARENT); imageView.setLayoutParams(params); rl.addView(imageView); viewHolder = new StickerViewHolder(); viewHolder.mImageView = imageView; convertView = rl; convertView.setTag(viewHolder); } else { viewHolder = (StickerViewHolder) convertView.getTag(); } int index = startIndex + position; if (index >= mCategory.getStickers().size()) { return convertView; } StickerItem sticker = mCategory.getStickers().get(index); if (sticker == null) { return convertView; } String stickerBitmapUri = StickerManager.getInstance().getStickerBitmapUri(sticker.getCategory(), sticker.getName()); LQREmotionKit.getImageLoader().displayImage(mContext, stickerBitmapUri, viewHolder.mImageView); return convertView; } class StickerViewHolder { public ImageView mImageView; } }