package com.mogujie.tt.widget; import java.util.ArrayList; import java.util.List; import com.mogujie.tt.R; import com.mogujie.tt.adapter.EmoGridViewAdapter; import com.mogujie.tt.adapter.ViewPageAdapter; import com.mogujie.tt.config.SysConstant; import com.mogujie.tt.ui.tools.Emoparser; import com.mogujie.tt.utils.CommonUtil; import android.content.Context; import android.graphics.Color; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.Gravity; import android.view.View; import android.widget.AdapterView; import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.AdapterView.OnItemClickListener; public class EmoGridView extends LinearLayout { private Context _context; private ViewPager _viewPager; private LinearLayout _llDot; private OnEmoGridViewItemClick onEmoGridViewItemClick; private ImageView[] dots; /** ViewPager当前页 */ private int currentIndex; /** ViewPager页数 */ private int viewPager_size; /** 默认一页20个item */ private double pageItemCount = 20d; /** 保存每个页面的GridView视图 */ private List<GridView> list_Views; /** viewpage高度 */ public EmoGridView(Context cxt) { super(cxt); _context = cxt; initViewPage(); initFootDots(); } public EmoGridView(Context cxt, AttributeSet attrs) { super(cxt, attrs); _context = cxt; initViewPage(); initFootDots(); } private void initViewPage() { setOrientation(VERTICAL); _viewPager = new ViewPager(_context); _llDot = new LinearLayout(_context); _viewPager.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, CommonUtil.getDefaultPannelHeight(_context))); _llDot.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); _llDot.setGravity(Gravity.CENTER); _llDot.setOrientation(HORIZONTAL); addView(_viewPager); addView(_llDot); } private void initFootDots() { viewPager_size = (int) Math.ceil(Emoparser.getInstance(_context) .getResIdList().length / pageItemCount); int mod = Emoparser.getInstance(_context).getResIdList().length % (SysConstant.pageSize - 1); if (mod == 1) --viewPager_size; if (0 < viewPager_size) { if (viewPager_size == 1) { _llDot.setVisibility(View.GONE); } else { _llDot.setVisibility(View.VISIBLE); for (int i = 0; i < viewPager_size; i++) { ImageView image = new ImageView(_context); image.setTag(i); // LinearLayout.LayoutParams params = new // LinearLayout.LayoutParams( // 20, 20); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params.setMargins(5, CommonUtil.getElementSzie(_context) / 2, 5, CommonUtil.getElementSzie(_context) / 2); image.setBackgroundResource(R.drawable.tt_default_emo_dots); image.setEnabled(false); _llDot.addView(image, params); } } } if (1 != viewPager_size) { dots = new ImageView[viewPager_size]; for (int i = 0; i < viewPager_size; i++) { dots[i] = (ImageView) _llDot.getChildAt(i); dots[i].setEnabled(true); dots[i].setTag(i); } currentIndex = 0; dots[currentIndex].setEnabled(false); _viewPager .setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int arg0) { setCurDot(arg0); } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageScrollStateChanged(int arg0) { } }); } } private void setCurDot(int position) { if (position < 0 || position > viewPager_size - 1 || currentIndex == position) { return; } dots[position].setEnabled(false); dots[currentIndex].setEnabled(true); currentIndex = position; } public void setAdapter() { if (onEmoGridViewItemClick == null) { return; } list_Views = new ArrayList<GridView>(); for (int i = 0; i < viewPager_size; i++) { list_Views.add(getViewPagerItem(i)); } _viewPager.setAdapter(new ViewPageAdapter(list_Views)); } /** 生成gridView数据 */ private int[] getGridViewData(int index) { ++index; int startPos = (index - 1) * (SysConstant.pageSize - 1); int endPos = index * (SysConstant.pageSize - 1); int length = 0; if (endPos > Emoparser.getInstance(_context).getResIdList().length) { endPos = Emoparser.getInstance(_context).getResIdList().length; } length = endPos - startPos + 1; int[] tmps = new int[length]; int num = 0; for (int i = startPos; i < endPos; i++) { tmps[num] = Emoparser.getInstance(_context).getResIdList()[i]; num++; } if (length > 1) tmps[length - 1] = R.drawable.tt_default_emo_back_normal; return tmps; } private GridView getViewPagerItem(final int index) { GridView gridView = new GridView(_context); gridView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); gridView.setNumColumns(7); gridView.setVerticalScrollBarEnabled(false); gridView.setHorizontalScrollBarEnabled(false); gridView.setPadding(8, 8, 8, 0); gridView.setVerticalSpacing(CommonUtil.getElementSzie(_context) / 2 + CommonUtil.getElementSzie(_context) / 3); // gridView.setVerticalSpacing(30); gridView.setBackgroundColor(Color.TRANSPARENT); gridView.setAdapter(new EmoGridViewAdapter(_context, getGridViewData(index))); gridView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { int start = index * (SysConstant.pageSize - 1); onEmoGridViewItemClick.onItemClick(position + start, index); } }); return gridView; } public void setOnEmoGridViewItemClick( OnEmoGridViewItemClick onFaceGridViewItemClick) { this.onEmoGridViewItemClick = onFaceGridViewItemClick; } public interface OnEmoGridViewItemClick { public void onItemClick(int facesPos, int viewIndex); } }