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;
    }

 

posted @ 2014-08-20 10:03  一木广予口贝  阅读(548)  评论(0)    收藏  举报