Search in sources :

Example 1 with EmoticonFilter

use of sj.keyboard.interfaces.EmoticonFilter in project XhsEmoticonsKeyboard by w446108264.

the class MainActivity method onCreate.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final XhsEmoticonsKeyBoard ek_bar = (XhsEmoticonsKeyBoard) findViewById(R.id.ek_bar);
    // source data
    ArrayList<EmojiBean> emojiArray = new ArrayList<>();
    Collections.addAll(emojiArray, DefEmoticons.getDefEmojiArray());
    // emoticon click
    final EmoticonClickListener emoticonClickListener = new EmoticonClickListener() {

        @Override
        public void onEmoticonClick(Object o, int actionType, boolean isDelBtn) {
            if (isDelBtn) {
                int action = KeyEvent.ACTION_DOWN;
                int code = KeyEvent.KEYCODE_DEL;
                KeyEvent event = new KeyEvent(action, code);
                ek_bar.getEtChat().onKeyDown(KeyEvent.KEYCODE_DEL, event);
            } else {
                if (o == null) {
                    return;
                }
                String content = null;
                if (o instanceof EmojiBean) {
                    content = ((EmojiBean) o).emoji;
                }
                int index = ek_bar.getEtChat().getSelectionStart();
                Editable editable = ek_bar.getEtChat().getText();
                editable.insert(index, content);
            }
        }
    };
    // emoticon instantiate
    final EmoticonDisplayListener emoticonDisplayListener = new EmoticonDisplayListener() {

        @Override
        public void onBindView(int i, ViewGroup viewGroup, EmoticonsAdapter.ViewHolder viewHolder, Object object, final boolean isDelBtn) {
            final EmojiBean emojiBean = (EmojiBean) object;
            if (emojiBean == null && !isDelBtn) {
                return;
            }
            viewHolder.ly_root.setBackgroundResource(com.keyboard.view.R.drawable.bg_emoticon);
            if (isDelBtn) {
                viewHolder.iv_emoticon.setImageResource(R.mipmap.icon_del);
            } else {
                viewHolder.iv_emoticon.setImageResource(emojiBean.icon);
            }
            viewHolder.rootView.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    emoticonClickListener.onEmoticonClick(emojiBean, 0, isDelBtn);
                }
            });
        }
    };
    //  page instantiate
    PageViewInstantiateListener pageViewInstantiateListener = new PageViewInstantiateListener<EmoticonPageEntity>() {

        @Override
        public View instantiateItem(ViewGroup viewGroup, int i, EmoticonPageEntity pageEntity) {
            if (pageEntity.getRootView() == null) {
                EmoticonPageView pageView = new EmoticonPageView(viewGroup.getContext());
                pageView.setNumColumns(pageEntity.getRow());
                pageEntity.setRootView(pageView);
                try {
                    EmoticonsAdapter adapter = new EmoticonsAdapter(viewGroup.getContext(), pageEntity, null);
                    // emoticon instantiate
                    adapter.setOnDisPlayListener(emoticonDisplayListener);
                    pageView.getEmoticonsGridView().setAdapter(adapter);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return pageEntity.getRootView();
        }
    };
    // build
    EmoticonPageSetEntity xhsPageSetEntity = new EmoticonPageSetEntity.Builder().setLine(3).setRow(7).setEmoticonList(emojiArray).setIPageViewInstantiateItem(pageViewInstantiateListener).setShowDelBtn(EmoticonPageEntity.DelBtnStatus.LAST).setIconUri(R.mipmap.ic_launcher).build();
    PageSetAdapter pageSetAdapter = new PageSetAdapter();
    pageSetAdapter.add(xhsPageSetEntity);
    ek_bar.setAdapter(pageSetAdapter);
    class EmojiFilter extends EmoticonFilter {

        private int emojiSize = -1;

        @Override
        public void filter(EditText editText, CharSequence text, int start, int lengthBefore, int lengthAfter) {
            emojiSize = emojiSize == -1 ? EmoticonsKeyboardUtils.getFontHeight(editText) : emojiSize;
            clearSpan(editText.getText(), start, text.toString().length());
            Matcher m = EmojiDisplay.getMatcher(text.toString().substring(start, text.toString().length()));
            if (m != null) {
                while (m.find()) {
                    String emojiHex = Integer.toHexString(Character.codePointAt(m.group(), 0));
                    Drawable drawable = getDrawable(editText.getContext(), EmojiDisplay.HEAD_NAME + emojiHex);
                    if (drawable != null) {
                        int itemHeight;
                        int itemWidth;
                        if (emojiSize == EmojiDisplay.WRAP_DRAWABLE) {
                            itemHeight = drawable.getIntrinsicHeight();
                            itemWidth = drawable.getIntrinsicWidth();
                        } else {
                            itemHeight = emojiSize;
                            itemWidth = emojiSize;
                        }
                        drawable.setBounds(0, 0, itemHeight, itemWidth);
                        EmojiSpan imageSpan = new EmojiSpan(drawable);
                        editText.getText().setSpan(imageSpan, start + m.start(), start + m.end(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
                    }
                }
            }
        }

        private void clearSpan(Spannable spannable, int start, int end) {
            if (start == end) {
                return;
            }
            EmojiSpan[] oldSpans = spannable.getSpans(start, end, EmojiSpan.class);
            for (int i = 0; i < oldSpans.length; i++) {
                spannable.removeSpan(oldSpans[i]);
            }
        }
    }
    // add a filter
    ek_bar.getEtChat().addEmoticonFilter(new EmojiFilter());
}
Also used : PageViewInstantiateListener(sj.keyboard.interfaces.PageViewInstantiateListener) Matcher(java.util.regex.Matcher) ArrayList(java.util.ArrayList) EmoticonPageEntity(sj.keyboard.data.EmoticonPageEntity) KeyEvent(android.view.KeyEvent) EmoticonClickListener(sj.keyboard.interfaces.EmoticonClickListener) EmojiBean(com.sj.emoji.EmojiBean) Editable(android.text.Editable) XhsEmoticonsKeyBoard(sj.keyboard.XhsEmoticonsKeyBoard) EditText(android.widget.EditText) EmoticonsAdapter(sj.keyboard.adpater.EmoticonsAdapter) ViewGroup(android.view.ViewGroup) EmojiSpan(com.sj.emoji.EmojiSpan) Drawable(android.graphics.drawable.Drawable) View(android.view.View) EmoticonPageView(sj.keyboard.widget.EmoticonPageView) EmoticonPageSetEntity(sj.keyboard.data.EmoticonPageSetEntity) EmoticonFilter(sj.keyboard.interfaces.EmoticonFilter) EmoticonPageView(sj.keyboard.widget.EmoticonPageView) PageSetAdapter(sj.keyboard.adpater.PageSetAdapter) EmoticonDisplayListener(sj.keyboard.interfaces.EmoticonDisplayListener) Spannable(android.text.Spannable)

Aggregations

Drawable (android.graphics.drawable.Drawable)1 Editable (android.text.Editable)1 Spannable (android.text.Spannable)1 KeyEvent (android.view.KeyEvent)1 View (android.view.View)1 ViewGroup (android.view.ViewGroup)1 EditText (android.widget.EditText)1 EmojiBean (com.sj.emoji.EmojiBean)1 EmojiSpan (com.sj.emoji.EmojiSpan)1 ArrayList (java.util.ArrayList)1 Matcher (java.util.regex.Matcher)1 XhsEmoticonsKeyBoard (sj.keyboard.XhsEmoticonsKeyBoard)1 EmoticonsAdapter (sj.keyboard.adpater.EmoticonsAdapter)1 PageSetAdapter (sj.keyboard.adpater.PageSetAdapter)1 EmoticonPageEntity (sj.keyboard.data.EmoticonPageEntity)1 EmoticonPageSetEntity (sj.keyboard.data.EmoticonPageSetEntity)1 EmoticonClickListener (sj.keyboard.interfaces.EmoticonClickListener)1 EmoticonDisplayListener (sj.keyboard.interfaces.EmoticonDisplayListener)1 EmoticonFilter (sj.keyboard.interfaces.EmoticonFilter)1 PageViewInstantiateListener (sj.keyboard.interfaces.PageViewInstantiateListener)1