Android 表情
1.Expression:
public class Expression {
public int drawable_id;
public String drawable_code;
public Expression ( ) {
super ( );
}
public Expression ( int drawable_id, String drawable_code ) {
super ( );
this.drawable_id = drawable_id;
this.drawable_code = drawable_code;
}
public int getDrawable_id ( ) {
return drawable_id;
}
public void setDrawable_id ( int drawable_id ) {
this.drawable_id = drawable_id;
}
public String getDrawable_code ( ) {
return drawable_code;
}
public void setDrawable_code ( String drawable_code ) {
this.drawable_code = drawable_code;
}
public static Expression getInstance(int drawable_id, String drawable_code){
return new Expression( drawable_id, drawable_code);
}
}
2.ExpressionTools
public class ExpressionTools {
private static String[] expression = new String[]{
"[微笑]","[撇嘴]","[色]","[发呆]","[得意]","[流泪]","[害羞]","[闭嘴]","[睡]","[大哭]","[尴尬]", "[发怒]","[调皮]",
"[呲牙]","[惊讶]","[难过]","[酷]","[冷汗]","[抓狂]","[吐]","[偷笑]","[可爱]","[白眼]","[傲慢]","[饥饿]","[困]",
"[惊恐]","[流汗]","[憨笑]","[大兵]","[奋斗]","[咒骂]","[疑问]","[嘘]","[晕]","[折磨]","[衰]","[骷髅]","[敲打]",
"[再见]", "[擦汗]","[抠鼻]","[鼓掌]","[糗大了]","[坏笑]","[左哼哼]","[右哼哼]","[哈欠]","[鄙视]","[委屈]","[快哭了]",
"[阴险]","[亲亲]","[吓]","[可怜]","[菜刀]","[西瓜]","[啤酒]","[篮球]","[乒乓]","[咖啡]","[饭]","[猪头]","[玫瑰]",
"[凋谢]","[示爱]","[爱心]","[心碎]","[蛋糕]","[闪电]","[炸弹]","[刀]","[足球]","[瓢虫]","[便便]","[月亮]","[太阳]",
"[礼物]","[拥抱]","[强]","[弱]","[握手]","[胜利]","[抱拳]","[勾引]","[拳头]","[差劲]","[爱你]","[NO]","[OK]",
"[爱情]","[飞吻]","[跳跳]","[发抖]","[怄火]","[转圈]","[磕头]","[回头]","[跳绳]","[挥手]","[激动]","[街舞]",
"[献吻]","[左太极]","[右太极]",""};
private static int[] resourceId = new int[]{
R.drawable.e100 ,R.drawable.e101 ,R.drawable.e102 ,R.drawable.e103 ,R.drawable.e104 ,R.drawable.e105,
R.drawable.e106 ,R.drawable.e107 ,R.drawable.e108 ,R.drawable.e109 ,R.drawable.e110 , R.drawable.e111,
R.drawable.e112 ,R.drawable.e113 ,R.drawable.e114 ,R.drawable.e115 ,R.drawable.e116 ,R.drawable.e117 ,
R.drawable.e118 ,R.drawable.e119 ,R.drawable.e120 ,R.drawable.e121 ,R.drawable.e122 ,R.drawable.e123 ,
R.drawable.e124 ,R.drawable.e125 ,R.drawable.e126 ,R.drawable.e127 ,R.drawable.e128 ,R.drawable.e129 ,
R.drawable.e130 ,R.drawable.e131 ,R.drawable.e132 ,R.drawable.e133 ,R.drawable.e134 ,R.drawable.e135 ,
R.drawable.e136 ,R.drawable.e137 ,R.drawable.e138 ,R.drawable.e139 ,R.drawable.e140 ,R.drawable.e141 ,
R.drawable.e142 ,R.drawable.e143 ,R.drawable.e144 ,R.drawable.e145 ,R.drawable.e146 ,R.drawable.e147 ,
R.drawable.e148 ,R.drawable.e149 ,R.drawable.e150 ,R.drawable.e151 ,R.drawable.e152 ,R.drawable.e153 ,
R.drawable.e154 ,R.drawable.e155 ,R.drawable.e156 ,R.drawable.e157 ,R.drawable.e158 ,R.drawable.e159 ,
R.drawable.e160 ,R.drawable.e161 ,R.drawable.e162 ,R.drawable.e163 ,R.drawable.e164 ,R.drawable.e165 ,
R.drawable.e166 ,R.drawable.e167 ,R.drawable.e168 ,R.drawable.e169 ,R.drawable.e170 ,R.drawable.e171 ,
R.drawable.e172 ,R.drawable.e173 ,R.drawable.e174 ,R.drawable.e175 ,R.drawable.e176 ,R.drawable.e177 ,
R.drawable.e178 ,R.drawable.e179 ,R.drawable.e180 ,R.drawable.e181 ,R.drawable.e182 ,R.drawable.e183 ,
R.drawable.e184 ,R.drawable.e185 ,R.drawable.e186 ,R.drawable.e187 ,R.drawable.e188 ,R.drawable.e189 ,
R.drawable.e190 ,R.drawable.e191 ,R.drawable.e192 ,R.drawable.e193 ,R.drawable.e194 ,R.drawable.e195 ,
R.drawable.e196 ,R.drawable.e197 ,R.drawable.e198 ,R.drawable.e199 ,R.drawable.e200 ,R.drawable.e201 ,
R.drawable.e202 ,R.drawable.e203 ,R.drawable.e204 ,R.drawable.face
};
public static int getResultId(String str){
for(int i = 0;i<expression.length;i++){
if(str.equals(expression[i])){
return resourceId[i];
}
}
return -1;
}
public static void initExpression(List<Expression> expressionList){
for (int i=0;i<expression.length;i++){
Expression e = Expression.getInstance(resourceId[i], expression[i]);
Log.e("=================",e+"");
expressionList.add(e);
}
Log.e("============",expression.length+"");
}
}
3.ExpressionPageAdapter
public class ExpressionPageAdapter extends PagerAdapter{
ArrayList<GridView>gridViews;
public ExpressionPageAdapter(ArrayList<GridView>gridViews){
this.gridViews=gridViews;
}
@Override
public int getCount ( ) {
return gridViews.size ();
}
@Override
public boolean isViewFromObject ( View view, Object o ) {
return view==o;
}
@Override
public void destroyItem(View container, int position, Object object) {
((ViewPager ) container).removeView(gridViews.get(position));
}
@Override
public Object instantiateItem(View container, int position) {
((ViewPager) container).addView(gridViews.get(position));
return gridViews.get(position);
}
}
4..xml
<LinearLayout android:id="@+id/ll_expression"
android:layout_width="fill_parent"
android:layout_height="@dimen/chat_ll_expression_height"
android:orientation="vertical"
android:visibility="gone">
<android.support.v4.view.ViewPager
android:id="@+id/vp_id"
android:layout_width="wrap_content"
android:layout_height="@dimen/chat_vp_id_height"
android:visibility="visible"/>
<LinearLayout android:id="@+id/ll_vp_selected_index"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1.0"
android:gravity="center"
android:orientation="horizontal">
</LinearLayout>
</LinearLayout>
5.style.xml
<dimen name="chat_ll_expression_height">160dp</dimen>
<dimen name="chat_vp_id_height">150dp</dimen>
<dimen name="chat_gv_padding_lr">2.5dp</dimen>
<dimen name="chat_gv_padding_bt">5dp</dimen>
<dimen name="chat_gv_spacing">10dp</dimen>
<dimen name="chat_expression_columns">7dp</dimen>
<dimen name="chat_expression_rows">3dp</dimen>
<dimen name="expression_list_item_iv_wh">40dp</dimen>
<dimen name="chat_dot_wh">6dp</dimen>
<dimen name="chat_dot_margin_lr">5dp</dimen>
6.java code
private static List<Expression> expressionList = new ArrayList<Expression>();
private int columns = 7;
private int rows = 3;
private int pageExpressionCount = columns * rows;
ArrayList<GridView> gridViews;
ExpressionPageAdapter expressionPageAdapter;
LinearLayout ll_vp_selected_index;
LinearLayout ll_expression;
if (null == expressionPageAdapter) {
expressionList.clear();
ExpressionTools.initExpression(this.expressionList);
List<List<Expression>> lists = initGridViewData();
gridViews = new ArrayList<GridView>();
int gridView_padding_lr = (int) getResources().getDimension(R.dimen.chat_gv_padding_lr);
int gridView_padding_bt = (int) getResources().getDimension(R.dimen.chat_gv_padding_bt);
int gridView_spacing = (int) getResources().getDimension(R.dimen.chat_gv_spacing);
for (int i = 0; i < lists.size(); i++) {
List<Expression> l = lists.get(i);
if (null != l) {
// 生成当前GridView
final GridView gv = new GridView(this);
gv.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
gv.setNumColumns(columns);
gv.setGravity(Gravity.CENTER);
gv.setPadding(gridView_padding_lr, gridView_padding_bt, gridView_padding_lr, 0);
gv.setHorizontalSpacing(gridView_spacing);
gv.setVerticalSpacing(gridView_spacing);
ExpressionImageAdapter expressionImageAdapter = new ExpressionImageAdapter(this, l);
gv.setAdapter(expressionImageAdapter);
int chat_dot_margin_lr = (int) getResources().getDimension(R.dimen.chat_dot_margin_lr);
int chat_dot_wh = (int) getResources().getDimension(R.dimen.chat_dot_wh);
// --点击列表事件处理--//
gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Expression e = (Expression) gv.getItemAtPosition(arg2);
Log.e("_____________", "点击表情_" + e.drawable_code);
input_face[face_count] = e.drawable_code;
face_count++;
int index = editText.getSelectionStart();
Editable edit = editText.getEditableText();// 获取EditText的文字
String content_all = edit.toString();
String content_forward = content_all.substring(0, index);
Log.e("_____________", "content_all = " + content_all + "|content_forward = "
+ content_forward + "|");
ImageSpan imageSpan =
new ImageSpan(BitmapFactory.decodeResource(getResources(), e.drawable_id));
SpannableString spannableString = new SpannableString(e.drawable_code);
spannableString.setSpan(imageSpan, 0, e.drawable_code.length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Log.e("_____________", "spannableString=" + spannableString.toString() + "__index="
+ index);
if (index < 0 || index >= edit.length()) {
edit.append(spannableString);
} else {
edit.insert(index, spannableString);
}
}
});
gridViews.add(gv);
// 生成索引图
ImageView imageView = new ImageView(this);
android.widget.LinearLayout.LayoutParams lp =
new android.widget.LinearLayout.LayoutParams(chat_dot_wh, chat_dot_wh);
lp.leftMargin = chat_dot_margin_lr;
lp.rightMargin = chat_dot_margin_lr;
imageView.setLayoutParams(lp);
ll_vp_selected_index.addView(imageView);
}
}
expressionPageAdapter = new ExpressionPageAdapter(gridViews);
viewPager.setAdapter(expressionPageAdapter);
}
private List<List<Expression>> initGridViewData() {
List<List<Expression>> lists = new ArrayList<List<Expression>>();
List<Expression> list = null;
for (int i = 0; i < expressionList.size(); i++) {
if (i % pageExpressionCount == 0) {
if (null != list) {
lists.add(list);
}
list = new ArrayList<Expression>();
}
list.add(expressionList.get(i));
}
return lists;
}
浙公网安备 33010602011771号