package net.coding.program.common.widget.input; import android.content.Context; import android.os.Parcelable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.View; import android.widget.CheckBox; import android.widget.FrameLayout; import android.widget.LinearLayout; import net.coding.program.R; import net.coding.program.common.MyImageGetter; import net.coding.program.message.EmojiFragment; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.Click; import org.androidannotations.annotations.EViewGroup; import org.androidannotations.annotations.ViewById; /** * Created by chenchao on 16/1/21. * emoji 选择 */ @EViewGroup(R.layout.input_view_emoji_keyboard) public class EmojiKeyboard extends FrameLayout { private MyImageGetter myImageGetter; private FragmentActivity mActivity; private InputAction inputAction; @ViewById LinearLayout emojiKeyboardIndicator; @ViewById ViewPager viewPager; private EmojiPagerAdapter mEmojiPagerAdapter; private MonkeyPagerAdapter mMonkeyPagerAdapter; private ZhongqiuPagerAdapter mZhongqiuPagerAdapter; @ViewById View emojiButton, monkeyButton, zhongqiuButton; PageChangeListener pageChange = new PageChangeListener(); private CheckBox checkBoxEmoji; @ViewById View emojiKeyboardLayout; public EmojiKeyboard(Context context, AttributeSet attrs) { super(context, attrs); mActivity = (FragmentActivity) getContext(); myImageGetter = new MyImageGetter(mActivity); FragmentManager fragmentManager = mActivity.getSupportFragmentManager(); mEmojiPagerAdapter = new EmojiPagerAdapter(fragmentManager); mMonkeyPagerAdapter = new MonkeyPagerAdapter(fragmentManager); mZhongqiuPagerAdapter = new ZhongqiuPagerAdapter(fragmentManager); } public void showEmojiOnly() { monkeyButton.setVisibility(View.INVISIBLE); findViewById(R.id.selectMonkeyDivideLine1).setVisibility(View.INVISIBLE); zhongqiuButton.setVisibility(View.INVISIBLE); findViewById(R.id.selectMonkeyDivideLine2).setVisibility(View.INVISIBLE); } @AfterViews void initEmojiKeyboard() { viewPager.setOnPageChangeListener(pageChange); emojiButton(); } public void setInputAction(InputAction action) { inputAction = action; } @Click void emojiButton() { setIndicatorCount(emojiIcons.length); if (viewPager.getAdapter() != mEmojiPagerAdapter) { viewPager.setAdapter(mEmojiPagerAdapter); pageChange.resetPos(); } setPressEmojiType(EmojiFragment.Type.Small); } @Click void monkeyButton() { setIndicatorCount(monkeyIcons.length); if (viewPager.getAdapter() != mMonkeyPagerAdapter) { viewPager.setAdapter(mMonkeyPagerAdapter); pageChange.resetPos(); } setPressEmojiType(EmojiFragment.Type.Big); } @Click void zhongqiuButton() { setIndicatorCount(zhongqiuIcons.length); if (viewPager.getAdapter() != mZhongqiuPagerAdapter) { viewPager.setAdapter(mZhongqiuPagerAdapter); pageChange.resetPos(); } setPressEmojiType(EmojiFragment.Type.Zhongqiu); } private void setPressEmojiType(EmojiFragment.Type type) { if (type == EmojiFragment.Type.Small) { setEmojiButtonBackground(emojiButton); } else if (type == EmojiFragment.Type.Big) { setEmojiButtonBackground(monkeyButton); } else { setEmojiButtonBackground(zhongqiuButton); } } private void setEmojiButtonBackground(View view) { final int colorNormal = 0x00000000; final int colorPress = 0xffe8e8e8; View[] views = new View[]{emojiButton, monkeyButton, zhongqiuButton}; for (View item : views) { if (view == item) { item.setBackgroundColor(colorPress); } else { item.setBackgroundColor(colorNormal); } } } private void setIndicatorCount(int count) { if (count <= 1) { emojiKeyboardIndicator.setVisibility(INVISIBLE); return; } else { emojiKeyboardIndicator.setVisibility(VISIBLE); } emojiKeyboardIndicator.removeAllViews(); int pointWidth = mActivity.getResources().getDimensionPixelSize(R.dimen.point_width); int pointHeight = pointWidth; int pointMargin = mActivity.getResources().getDimensionPixelSize(R.dimen.point_margin); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(pointWidth, pointHeight); lp.leftMargin = pointWidth; lp.rightMargin = pointMargin; for (int i = 0; i < count; ++i) { View pointView = mActivity.getLayoutInflater().inflate(R.layout.common_point, null); emojiKeyboardIndicator.addView(pointView, lp); } emojiKeyboardIndicator.getChildAt(0).setBackgroundResource(R.drawable.ic_point_select); } public enum EmojiType { Default, SmallOnly } class PageChangeListener extends ViewPager.SimpleOnPageChangeListener { int oldPos = 0; public void resetPos() { oldPos = 0; } @Override public void onPageSelected(int position) { View oldPoint = emojiKeyboardIndicator.getChildAt(oldPos); View newPoint = emojiKeyboardIndicator.getChildAt(position); oldPoint.setBackgroundResource(R.drawable.ic_point_normal); newPoint.setBackgroundResource(R.drawable.ic_point_select); oldPos = position; } } class EmojiPagerAdapter extends FragmentStatePagerAdapter { EmojiPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int i) { EmojiFragment fragment = new EmojiFragment(); fragment.init(emojiIcons[i], myImageGetter, inputAction, EmojiFragment.Type.Small); return fragment; } @Override public int getCount() { return emojiIcons.length; } @Override public Parcelable saveState() { return null; } @Override public void restoreState(Parcelable state, ClassLoader loader) { } } class MonkeyPagerAdapter extends FragmentStatePagerAdapter { MonkeyPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int i) { EmojiFragment fragment = new EmojiFragment(); fragment.init(monkeyIcons[i], myImageGetter, inputAction, EmojiFragment.Type.Big); return fragment; } @Override public int getCount() { return monkeyIcons.length; } @Override public Parcelable saveState() { return null; } @Override public void restoreState(Parcelable state, ClassLoader loader) { } } class ZhongqiuPagerAdapter extends FragmentStatePagerAdapter { ZhongqiuPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { EmojiFragment fragment = new EmojiFragment(); fragment.init(zhongqiuIcons[position], myImageGetter, inputAction, EmojiFragment.Type.Zhongqiu); return fragment; } @Override public int getCount() { return zhongqiuIcons.length; } @Override public Parcelable saveState() { return null; } @Override public void restoreState(Parcelable state, ClassLoader loader) { } } private static String emojiIcons[][] = {{ "smiley", "heart_eyes", "pensive", "flushed", "grin", "kissing_heart", "wink", "angry", "disappointed", "disappointed_relieved", "sob", "stuck_out_tongue_closed_eyes", "rage", "persevere", "unamused", "smile", "mask", "kissing_face", "sweat", "joy", "ic_keyboard_delete" }, { "blush", "cry", "stuck_out_tongue_winking_eye", "fearful", "cold_sweat", "dizzy_face", "smirk", "scream", "sleepy", "confounded", "relieved", "smiling_imp", "ghost", "santa", "dog", "pig", "cat", "a00001", "a00002", "facepunch", "ic_keyboard_delete" }, { "fist", "v", "muscle", "clap", "point_left", "point_up_2", "point_right", "point_down", "ok_hand", "heart", "broken_heart", "sunny", "moon", "star2", "zap", "cloud", "lips", "rose", "coffee", "birthday", "ic_keyboard_delete" }, { "clock10", "beer", "mag", "iphone", "house", "car", "gift", "soccer", "bomb", "gem", "alien", "my100", "money_with_wings", "video_game", "hankey", "sos", "zzz", "microphone", "umbrella", "book", "ic_keyboard_delete"} }; private static String monkeyIcons[][] = new String[][]{{ "coding_emoji_01", "coding_emoji_02", "coding_emoji_03", "coding_emoji_04", "coding_emoji_05", "coding_emoji_06", "coding_emoji_07", "coding_emoji_08" }, { "coding_emoji_09", "coding_emoji_10", "coding_emoji_11", "coding_emoji_12", "coding_emoji_13", "coding_emoji_14", "coding_emoji_15", "coding_emoji_16" }, { "coding_emoji_17", "coding_emoji_18", "coding_emoji_19", "coding_emoji_20", "coding_emoji_21", "coding_emoji_22", "coding_emoji_23", "coding_emoji_24" }, { "coding_emoji_25", "coding_emoji_26", "coding_emoji_27", "coding_emoji_28", "coding_emoji_29", "coding_emoji_30", "coding_emoji_31", "coding_emoji_32", }, { "coding_emoji_33", "coding_emoji_34", "coding_emoji_35", "coding_emoji_36", "coding_emoji_38", "coding_emoji_39", "coding_emoji_40", "coding_emoji_41", }, { "coding_emoji_42", "coding_emoji_43", }}; private static String zhongqiuIcons[][] = new String[][]{{ "festival_emoji_01", "festival_emoji_02", "festival_emoji_03", "festival_emoji_04", "festival_emoji_05", "festival_emoji_06", "festival_emoji_07", "festival_emoji_08" }}; }