LQREmojiLibrary
一個超級牛逼的表情庫卓鹿,可使用表情及貼圖功能重荠,方便好用备闲,抽離圖片加載接口,讓開發(fā)者自己選擇圖片加載工具挡篓。
碼云:
GitHub:
一婉陷、簡述
這個庫相當(dāng)牛逼,好用瞻凤。這個庫相當(dāng)牛逼憨攒,好用世杀。這個庫相當(dāng)牛逼阀参,好用。好了瞻坝,接下來直接看效果圖吧:
二蛛壳、引用初始化
1杏瞻、在自己項目中添加本項目依賴:
compile 'com.lqr.emoji:library:1.0.2'
2、初始化
使用本庫必須在自定義的Application中使用LQREmotionKit對庫進(jìn)行初始化衙荐,LQREmotionKit提供了四種初始化方法捞挥,請根據(jù)自己的需要選擇。
*使用前需要注意以下幾點:
- 本庫抽離出了圖片加載接口忧吟,可讓開發(fā)者自己選擇圖片加載工具(如:Glide砌函、UIL等),所以使用本庫必須實現(xiàn)IImageLoader接口溜族。
- 本庫支持設(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();
}
});