package sj.keyboard.widget;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import sj.keyboard.adpater.PageSetAdapter;
import sj.keyboard.data.PageSetEntity;
public class EmoticonsFuncView extends ViewPager {
protected PageSetAdapter mPageSetAdapter;
protected int mCurrentPagePosition;
public EmoticonsFuncView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setAdapter(PageSetAdapter adapter) {
super.setAdapter(adapter);
this.mPageSetAdapter = adapter;
setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
checkPageChange(position);
mCurrentPagePosition = position;
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
if (mOnEmoticonsPageViewListener == null
|| mPageSetAdapter.getPageSetEntityList().isEmpty()) {
return;
}
PageSetEntity pageSetEntity = mPageSetAdapter.getPageSetEntityList().get(0);
mOnEmoticonsPageViewListener.playTo(0, pageSetEntity);
mOnEmoticonsPageViewListener.emoticonSetChanged(pageSetEntity);
}
public void setCurrentPageSet(PageSetEntity pageSetEntity) {
if (mPageSetAdapter == null || mPageSetAdapter.getCount() <= 0) {
return;
}
setCurrentItem(mPageSetAdapter.getPageSetStartPosition(pageSetEntity));
}
public void checkPageChange(int position) {
if (mPageSetAdapter == null) {
return;
}
int end = 0;
for (PageSetEntity pageSetEntity : mPageSetAdapter.getPageSetEntityList()) {
int size = pageSetEntity.getPageCount();
if (end + size > position) {
boolean isEmoticonSetChanged = true;
// 上一表情集
if (mCurrentPagePosition - end >= size) {
if (mOnEmoticonsPageViewListener != null) {
mOnEmoticonsPageViewListener.playTo(position - end, pageSetEntity);
}
}
// 下一表情集
else if (mCurrentPagePosition - end < 0) {
if (mOnEmoticonsPageViewListener != null) {
mOnEmoticonsPageViewListener.playTo(0, pageSetEntity);
}
}
// 当前表情集
else {
if (mOnEmoticonsPageViewListener != null) {
mOnEmoticonsPageViewListener.playBy(mCurrentPagePosition - end, position - end, pageSetEntity);
}
isEmoticonSetChanged = false;
}
if (isEmoticonSetChanged && mOnEmoticonsPageViewListener != null) {
mOnEmoticonsPageViewListener.emoticonSetChanged(pageSetEntity);
}
return;
}
end += size;
}
}
private OnEmoticonsPageViewListener mOnEmoticonsPageViewListener;
public void setOnIndicatorListener(OnEmoticonsPageViewListener listener) {
mOnEmoticonsPageViewListener = listener;
}
public interface OnEmoticonsPageViewListener {
void emoticonSetChanged(PageSetEntity pageSetEntity);
/**
* @param position 相对于当前表情集的位置
*/
void playTo(int position, PageSetEntity pageSetEntity);
/**
* @param oldPosition 相对于当前表情集的始点位置
* @param newPosition 相对于当前表情集的终点位置
*/
void playBy(int oldPosition, int newPosition, PageSetEntity pageSetEntity);
}
}