package com.anthony.inputlayout.layout;
import android.content.Context;
import android.content.res.TypedArray;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import com.anthony.inputlayout.utils.Utils;
import com.anthony.inputlayout.utils.EmotionUtil;
import com.trs.inputlayout.R;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class EmotionKeyboardLayout extends BaseCustomCompositeView {
private static final int EMOTION_COLUMN = 7;
private static final int EMOTION_ROW = 4;
private static final int EMOTION_PAGE_SIZE = EMOTION_COLUMN * EMOTION_ROW - 1;
private ViewPager mContentVp;
private LinearLayout mIndicatorLl;
private ArrayList<ImageView> mIndicatorIvList;
private ArrayList<GridView> mGridViewList;
private Callback mCallback;
public EmotionKeyboardLayout(Context context) {
super(context);
}
public EmotionKeyboardLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public EmotionKeyboardLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected int getLayoutId() {
return R.layout.layout_emotion_keyboard;
}
@Override
protected void initView() {
mContentVp = getViewById(R.id.vp_emotion_keyboard_content);
mIndicatorLl = getViewById(R.id.ll_emotion_keyboard_indicator);
}
@Override
protected void setListener() {
mContentVp.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
for (int i = 0; i < mIndicatorIvList.size(); i++) {
mIndicatorIvList.get(i).setEnabled(false);
}
mIndicatorIvList.get(position).setEnabled(true);
}
});
}
@Override
protected int[] getAttrs() {
return new int[0];
}
@Override
protected void initAttr(int attr, TypedArray typedArray) {
}
@Override
protected void processLogic() {
mIndicatorIvList = new ArrayList<>();
mGridViewList = new ArrayList<>();
int emotionPageCount = (EmotionUtil.sEmotionKeyArr.length - 1) / EMOTION_PAGE_SIZE + 1;
ImageView indicatorIv;
LinearLayout.LayoutParams indicatorIvLp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
int margin = Utils.dip2px(getContext(), 5);
indicatorIvLp.setMargins(margin, margin, margin, margin);
for (int i = 0; i < emotionPageCount; i++) {
indicatorIv = new ImageView(getContext());
indicatorIv.setLayoutParams(indicatorIvLp);
indicatorIv.setImageResource(R.drawable.selector_emotion_indicator);
indicatorIv.setEnabled(false);
mIndicatorIvList.add(indicatorIv);
mIndicatorLl.addView(indicatorIv);
mGridViewList.add(getGridView(i));
}
mIndicatorIvList.get(0).setEnabled(true);
mContentVp.setAdapter(new EmotionPagerAdapter());
}
private GridView getGridView(int position) {
int edge = Utils.dip2px(getContext(), 5);
GridView gridView = new GridView(getContext());
gridView.setPadding(edge, edge, edge, edge);
gridView.setNumColumns(EMOTION_COLUMN);
gridView.setVerticalSpacing(edge);
gridView.setHorizontalSpacing(edge);
gridView.setOverScrollMode(OVER_SCROLL_NEVER);
gridView.setVerticalScrollBarEnabled(false);
gridView.setVerticalFadingEdgeEnabled(false);
gridView.setHorizontalScrollBarEnabled(false);
gridView.setHorizontalFadingEdgeEnabled(false);
gridView.setSelector(android.R.color.transparent);
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
EmotionAdapter adapter = (EmotionAdapter) parent.getAdapter();
if (position == adapter.getCount() - 1) {
// 删除
if (mCallback != null) {
mCallback.onDelete();
}
} else {
// 插入表情
if (mCallback != null) {
mCallback.onInsert(adapter.getItem(position));
}
}
}
});
int start = position * EMOTION_PAGE_SIZE;
List<String> tempEmotionList = Arrays.asList(Arrays.copyOfRange(EmotionUtil.sEmotionKeyArr, start, start + EMOTION_PAGE_SIZE));
List<String> emotionList = new ArrayList<>();
emotionList.addAll(tempEmotionList);
emotionList.add("");
gridView.setAdapter(new EmotionAdapter(emotionList));
return gridView;
}
public void setCallback(Callback callback) {
mCallback = callback;
}
class EmotionPagerAdapter extends PagerAdapter {
@Override
public int getCount() {
return mGridViewList.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(mGridViewList.get(position));
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(mGridViewList.get(position));
return mGridViewList.get(position);
}
}
class EmotionAdapter extends BaseAdapter {
private List<String> mDatas;
public EmotionAdapter(List<String> datas) {
mDatas = datas;
}
@Override
public int getCount() {
return mDatas == null ? 0 : mDatas.size();
}
@Override
public String getItem(int position) {
return mDatas.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = View.inflate(getContext(), R.layout.item_emotion_keyboard, null);
}
ImageView iconIv = (ImageView) convertView;
if (position == getCount() - 1) {
iconIv.setImageResource(R.drawable.emoji_delete);
iconIv.setVisibility(VISIBLE);
} else {
String key = mDatas.get(position);
if (TextUtils.isEmpty(key)) {
iconIv.setVisibility(INVISIBLE);
} else {
iconIv.setImageResource(EmotionUtil.getImgByName(key));
iconIv.setVisibility(VISIBLE);
}
}
return convertView;
}
}
public interface Callback {
void onDelete();
void onInsert(String text);
}
}