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