package com.partynetwork.iparty.imessage; import java.util.ArrayList; import java.util.List; import java.util.Set; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.drawable.ColorDrawable; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.text.Spannable; import android.text.SpannableString; import android.text.style.ImageSpan; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.EditText; import android.widget.GridView; import android.widget.LinearLayout; import com.partynetwork.dataprovider.util.DisplayUtil; import com.partynetwork.iparty.R; import com.partynetwork.iparty.app.AppConfig; import com.partynetwork.myui.CirclePageIndicator; import com.partynetwork.myui.JazzyViewPager; import com.partynetwork.myui.JazzyViewPager.TransitionEffect; public class FacePageInit { public static final int NUM_PAGE = 6;// 总共有多少页 private Context context; private LinearLayout bodyView; private EditText editText; // 当前选择的页数 private int currentPage = 0; private List<String> keys; FacePageInit(Context context, LinearLayout bodyView, EditText editText) { this.context = context; this.bodyView = bodyView; this.editText = editText; initView(); } private void initView() { if (bodyView == null || editText == null) { return; } AppConfig config = AppConfig.getAppConfig(context); Set<String> keySet = config.getFaceMap().keySet(); keys = new ArrayList<String>(); keys.addAll(keySet); initFacePage(); } private void initFacePage() { // TODO Auto-generated method stub List<View> lv = new ArrayList<View>(); for (int i = 0; i < NUM_PAGE; ++i) { lv.add(getGridView(i)); } // bodyView.setVisibility(View.GONE); bodyView.setOrientation(LinearLayout.VERTICAL); bodyView.removeAllViews(); JazzyViewPager faceViewPager = new JazzyViewPager(context); faceViewPager .setPersistentDrawingCache(ViewGroup.PERSISTENT_ANIMATION_CACHE); FacePageAdeapter adapter = new FacePageAdeapter(lv, faceViewPager); faceViewPager.setAdapter(adapter); faceViewPager.setBackgroundColor(context.getResources().getColor( R.color.gray_bg)); faceViewPager.setCurrentItem(currentPage); faceViewPager.setTransitionEffect(TransitionEffect.Standard); CirclePageIndicator indicator = new CirclePageIndicator(context); indicator.setViewPager(faceViewPager); adapter.notifyDataSetChanged(); indicator.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int arg0) { currentPage = arg0; } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // do nothing } @Override public void onPageScrollStateChanged(int arg0) { // do nothing } }); bodyView.addView(faceViewPager, new android.view.ViewGroup.LayoutParams( android.view.ViewGroup.LayoutParams.MATCH_PARENT, DisplayUtil.dip2px(context, 120))); bodyView.addView(indicator); } private GridView getGridView(int i) { // TODO Auto-generated method stub GridView gv = new GridView(context); gv.setNumColumns(7); gv.setSelector(new ColorDrawable(Color.TRANSPARENT));// 屏蔽GridView默认点击效果 gv.setBackgroundColor(Color.TRANSPARENT); gv.setCacheColorHint(Color.TRANSPARENT); gv.setHorizontalSpacing(1); gv.setVerticalSpacing(1); gv.setLayoutParams(new android.view.ViewGroup.LayoutParams( android.view.ViewGroup.LayoutParams.MATCH_PARENT, android.view.ViewGroup.LayoutParams.MATCH_PARENT)); gv.setGravity(Gravity.CENTER); gv.setAdapter(new FaceAdapter(context, i)); gv.setOnTouchListener(forbidenScroll); gv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub if (arg2 == FaceAdapter.NUM) {// 删除键的位置 int selection = editText.getSelectionStart(); String text = editText.getText().toString(); if (selection > 0) { String text2 = text.substring(selection - 1); if ("]".equals(text2)) { int start = text.lastIndexOf("["); int end = selection; editText.getText().delete(start, end); return; } editText.getText().delete(selection - 1, selection); } } else { int count = currentPage * FaceAdapter.NUM + arg2; // 注释的部分,在EditText中显示字符串 // String ori = msgEt.getText().toString(); // int index = msgEt.getSelectionStart(); // StringBuilder stringBuilder = new StringBuilder(ori); // stringBuilder.insert(index, keys.get(count)); // msgEt.setText(stringBuilder.toString()); // msgEt.setSelection(index + keys.get(count).length()); // 下面这部分,在EditText中显示表情 AppConfig config = AppConfig.getAppConfig(context); Bitmap bitmap = BitmapFactory.decodeResource( context.getResources(), (Integer) config .getFaceMap().values().toArray()[count]); if (bitmap != null) { int rawHeigh = bitmap.getHeight(); int rawWidth = bitmap.getWidth(); int newHeight = 30; int newWidth = 30; // 计算缩放因子 float heightScale = ((float) newHeight) / rawHeigh; float widthScale = ((float) newWidth) / rawWidth; // 新建立矩阵 Matrix matrix = new Matrix(); matrix.postScale(heightScale, widthScale); // 设置图片的旋转角度 // matrix.postRotate(-30); // 设置图片的倾斜 // matrix.postSkew(0.1f, 0.1f); // 将图片大小压缩 // 压缩后图片的宽和高以及kB大小均会变化 Bitmap newBitmap = Bitmap.createBitmap(bitmap, 0, 0, rawWidth, rawHeigh, matrix, true); ImageSpan imageSpan = new ImageSpan(context, newBitmap); String emojiStr = keys.get(count); SpannableString spannableString = new SpannableString( emojiStr); spannableString.setSpan(imageSpan, emojiStr.indexOf('['), emojiStr.indexOf(']') + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); editText.append(spannableString); } else { String ori = editText.getText().toString(); int index = editText.getSelectionStart(); StringBuilder stringBuilder = new StringBuilder(ori); stringBuilder.insert(index, keys.get(count)); editText.setText(stringBuilder.toString()); editText.setSelection(index + keys.get(count).length()); } } } }); return gv; } // 防止乱pageview乱滚动 private OnTouchListener forbidenScroll = new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_MOVE) { return true; } return false; } }; }