高仿微信表情控件 -- LQREmojiLibrary

LQREmojiLibrary

一個超級牛逼的表情庫卓鹿,可使用表情及貼圖功能重荠,方便好用备闲,抽離圖片加載接口,讓開發(fā)者自己選擇圖片加載工具挡篓。

碼云:

https://git.oschina.net/CSDNLQR/LQREmojiLibrary

GitHub:

https://github.com/GitLqr/LQREmojiLibrary

一婉陷、簡述

這個庫相當(dāng)牛逼,好用瞻凤。這個庫相當(dāng)牛逼憨攒,好用世杀。這個庫相當(dāng)牛逼阀参,好用。好了瞻坝,接下來直接看效果圖吧:

DemoApp下載

二蛛壳、引用初始化

1杏瞻、在自己項目中添加本項目依賴:

compile 'com.lqr.emoji:library:1.0.2'

2、初始化

使用本庫必須在自定義的Application中使用LQREmotionKit對庫進(jìn)行初始化衙荐,LQREmotionKit提供了四種初始化方法捞挥,請根據(jù)自己的需要選擇。

*使用前需要注意以下幾點:

  1. 本庫抽離出了圖片加載接口忧吟,可讓開發(fā)者自己選擇圖片加載工具(如:Glide砌函、UIL等),所以使用本庫必須實現(xiàn)IImageLoader接口溜族。
  2. 本庫支持設(shè)置貼圖的存放路徑讹俊,這意味著開發(fā)者可以根據(jù)自己項目需求修改貼圖的存放位置,并且支持貼圖自定義煌抒。默認(rèn)的貼圖存放在/data/data/包名/files/stickers 目錄下仍劈。

1)不帶IImageLoader的init()

public static void init(Context context)

public static void init(Context context, String stickerPath)

2)帶IImageLoader的init()

public static void init(Context context, IImageLoader imageLoader)

public static void init(Context context, String stickerPath, IImageLoader imageLoader)

3)示例

public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        LQREmotionKit.init(this, new IImageLoader() {
            @Override
            public void displayImage(Context context, String path, ImageView imageView) {
                Glide.with(context).load(path).centerCrop().diskCacheStrategy(DiskCacheStrategy.SOURCE).into(imageView);
            }
        });
    }
}

三、表情功能集成

1寡壮、布局中使用EmotionLayout控件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical">

    <!--內(nèi)容區(qū)-->
    <LinearLayout
        android:id="@+id/llContent"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical">

        ...
        這里一般是放消息列表贩疙,和內(nèi)容輸入框等控件
        ...

    </LinearLayout>

    <!--表情區(qū)-->
    <com.lqr.emoji.EmotionLayout
        android:id="@+id/elEmotion"
        android:layout_width="match_parent"
        android:layout_height="270dp"
        android:visibility="gone"/>

</LinearLayout>

2、實現(xiàn)輸入框圖文混排

1)將內(nèi)容輸入框交給EmotionLayout管理(強烈建議!!!)

mElEmotion.attachEditText(mEtContent);

2)實現(xiàn)IEmotionSelectedListener接口况既,手動實現(xiàn)圖文混排(有自己的實現(xiàn)方式的这溅,可以采用這種方式)

mElEmotion.setEmotionSelectedListener(new IEmotionSelectedListener() {
    @Override
    public void onEmojiSelected(String key) {
        if (mEtContent == null)
            return;
        Editable editable = mEtContent.getText();
        if (key.equals("/DEL")) {
            mEtContent.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL));
        } else {
            int start = mEtContent.getSelectionStart();
            int end = mEtContent.getSelectionEnd();
            start = (start < 0 ? 0 : start);
            end = (start < 0 ? 0 : end);
            editable.replace(start, end, key);

            int editEnd = mEtContent.getSelectionEnd();
            MoonUtils.replaceEmoticons(LQREmotionKit.getContext(), editable, 0, editable.toString().length());
            mEtContent.setSelection(editEnd);
        }
    }

    @Override
    public void onStickerSelected(String categoryName, String stickerName, String stickerBitmapPath) {

    }
});

3、實現(xiàn)內(nèi)容區(qū)與表情區(qū)仿微信切換效果

private EmotionKeyboard mEmotionKeyboard;

private void initEmotionKeyboard() {
    mEmotionKeyboard = EmotionKeyboard.with(this);
    mEmotionKeyboard.bindToContent(mLlContent);
    mEmotionKeyboard.bindToEmotionButton(mIvEmo);
    mEmotionKeyboard.bindToEditText(mEtContent);
    mEmotionKeyboard.setEmotionLayout(mElEmotion);
}

4棒仍、效果

經(jīng)過上面幾步芍躏,就可以實現(xiàn)以下效果了:

四、貼圖功能集成

1降狠、設(shè)置貼圖的存放位置

這一步可略過对竣,不設(shè)置的話,貼圖的默認(rèn)存放位置是 /data/data/包名/files/stickers 榜配,可通過LQREmotionKit.getStickerPath()獲得否纬。

貼圖的存放位置只能通過LQREmotionKit的init()來設(shè)置:

LQREmotionKit.init(this, Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator+"sticker");

LQREmotionKit.init(this, Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "sticker", new IImageLoader() {
        @Override
        public void displayImage(Context context, String path, ImageView imageView) {
            Glide.with(context).load(path).centerCrop().diskCacheStrategy(DiskCacheStrategy.SOURCE).into(imageView);
        }
    });

2、將貼圖下載到指定貼圖的存放位置

1)自帶貼圖

本庫支持 集成默認(rèn)貼圖蛋褥,可將貼圖按規(guī)則放置在assets的sticker目錄下临燃,當(dāng)程序啟動時,會自動將assets的sticker目錄下所有的貼圖復(fù)制到貼圖的存放位置烙心。

2)網(wǎng)絡(luò)下載貼圖

//得到貼圖的存放位置
String stickerPath = LQREmotionKit.getStickerPath();
...
網(wǎng)絡(luò)下載(這里不同項目實現(xiàn)方式不同膜廊,請根據(jù)自己的項目實現(xiàn)該部分代碼)
...

3、監(jiān)聽用戶點擊貼圖事件

mElEmotion.setEmotionSelectedListener(new IEmotionSelectedListener() {
    @Override
    public void onEmojiSelected(String key) {
        
    }

    @Override
    public void onStickerSelected(String categoryName, String stickerName, String stickerBitmapPath) {
        String stickerPath = stickerBitmapPath;
        ...
        發(fā)送圖片
        ...
    }
});

4淫茵、效果

經(jīng)過上面幾步爪瓜,就可以實現(xiàn)以下效果了:

五、拓展按鈕的控制

1匙瘪、設(shè)置表情控件的拓展按鈕

默認(rèn)表情控件的底部Tab是不顯示“添加”按鈕和“設(shè)置”按鈕的铆铆,如果需要蝶缀,可通過以下代碼進(jìn)行控制。

mElEmotion.setEmotionAddVisiable(true);
mElEmotion.setEmotionSettingVisiable(true);
mElEmotion.setEmotionExtClickListener(new IEmotionExtClickListener() {
    @Override
    public void onEmotionAddClick(View view) {
        Toast.makeText(getApplicationContext(), "add", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onEmotionSettingClick(View view) {
        Toast.makeText(getApplicationContext(), "setting", Toast.LENGTH_SHORT).show();
    }
});

2薄货、效果

歡迎關(guān)注微信公眾號:全棧行動
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末翁都,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子谅猾,更是在濱河造成了極大的恐慌柄慰,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件税娜,死亡現(xiàn)場離奇詭異先煎,居然都是意外死亡,警方通過查閱死者的電腦和手機巧涧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門薯蝎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谤绳,你說我怎么就攤上這事占锯。” “怎么了缩筛?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵消略,是天一觀的道長。 經(jīng)常有香客問我瞎抛,道長艺演,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任桐臊,我火速辦了婚禮胎撤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘断凶。我一直安慰自己伤提,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布认烁。 她就那樣靜靜地躺著肿男,像睡著了一般。 火紅的嫁衣襯著肌膚如雪却嗡。 梳的紋絲不亂的頭發(fā)上舶沛,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音窗价,去河邊找鬼如庭。 笑死,一個胖子當(dāng)著我的面吹牛舌镶,可吹牛的內(nèi)容都是我干的柱彻。 我是一名探鬼主播豪娜,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼餐胀,長吁一口氣:“原來是場噩夢啊……” “哼哟楷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起否灾,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤卖擅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后墨技,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惩阶,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年扣汪,在試婚紗的時候發(fā)現(xiàn)自己被綠了断楷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡崭别,死狀恐怖冬筒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情茅主,我是刑警寧澤舞痰,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站诀姚,受9級特大地震影響响牛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赫段,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一呀打、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧糯笙,春花似錦聚磺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至稠炬,卻和暖如春焕阿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背首启。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工暮屡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人毅桃。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓褒纲,卻偏偏與公主長得像准夷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子莺掠,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容