package com.d3.d3xmpp.d3View.expression; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Parcelable; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.text.Spannable; import android.text.SpannableString; import android.text.style.ImageSpan; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.EditText; import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.SimpleAdapter; import com.d3.d3xmpp.R; /** * �Զ������ؼ���������̬����Ͷ�̬���� ʹ�÷������ڲ����ļ����ã�Ȼ�������ļ� expressionView = (ExpressionView) * findViewById(R.id.expression_view); expressionView.setEditText(msgEditText); * ��Ҫ��������ؼ�ʱ ��expressionView.setVisibility(View.VISIBLE);���� * * ����Ҫ��̬����Ļ���expressionView.setNoGif(); * �˿ؼ���Expressions��ExpressionUtil����������ʹ�ã���Ȼ�������˱����� * * @author mzh * */ public class ExpressionView extends LinearLayout { // ���� // private Activity activity; private EditText msgEditText; private ViewPager viewPager; private ArrayList<GridView> grids; private int[] expressionImages, expressionImages1, expressionImages2, expressionImagesGif, expressionImagesGif1, expressionImagesGif2; private String[] expressionImageNames, expressionImageNames1, expressionImageNames2, expressionImageNamesGif, expressionImageNamesGif1, expressionImageNamesGif2; private ImageView page1, page2, page3; private RelativeLayout normalBtn, gifBtn; private GridView gView1, gView2, gView3; private LinearLayout page_select_gif; private boolean isGif = false; private ExpressionListener expressionListener; @SuppressLint("NewApi") public ExpressionView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(context); } public ExpressionView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public ExpressionView(Context context) { super(context); init(context); } public void setEditText(EditText msgEditText) { this.msgEditText = msgEditText; } private void init(Context context) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.expression_view, this); page1 = (ImageView) findViewById(R.id.page0_select); page2 = (ImageView) findViewById(R.id.page1_select); page3 = (ImageView) findViewById(R.id.page2_select); // ������� expressionImages = Expressions.expressionImgs; expressionImageNames = Expressions.expressionImgNames; expressionImages1 = Expressions.expressionImgs1; expressionImageNames1 = Expressions.expressionImgNames1; expressionImages2 = Expressions.expressionImgs2; expressionImageNames2 = Expressions.expressionImgNames2; expressionImagesGif = Expressions.expressionImgsGif; expressionImageNamesGif = Expressions.expressionImgNamesGif; expressionImagesGif1 = Expressions.expressionImgsGif1; expressionImageNamesGif1 = Expressions.expressionImgNamesGif1; expressionImagesGif2 = Expressions.expressionImgsGif2; expressionImageNamesGif2 = Expressions.expressionImgNamesGif2; // ����ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); initViewPager(); // select btn normalBtn = (RelativeLayout) findViewById(R.id.exp_normal_layout); gifBtn = (RelativeLayout) findViewById(R.id.exp_gif_layout); normalBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { isGif = false; normalBtn.setBackgroundResource(R.color.theme_color); gifBtn.setBackgroundResource(R.color.btn_pre); initViewPager(); } }); gifBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { isGif = true; gifBtn.setBackgroundResource(R.color.theme_color); normalBtn.setBackgroundResource(R.color.btn_pre); initViewPager(); } }); } // ���� private void initViewPager() { LayoutInflater inflater = LayoutInflater.from(getContext()); grids = new ArrayList<GridView>(); gView1 = (GridView) inflater.inflate(R.layout.grid, null); if (isGif) setGifPage(page1, gView1, expressionImagesGif, expressionImageNamesGif); else setPage(page1, gView1, expressionImages, expressionImageNames); grids.add(gView1); gView2 = (GridView) inflater.inflate(R.layout.grid, null); grids.add(gView2); gView3 = (GridView) inflater.inflate(R.layout.grid, null); grids.add(gView3); page_select_gif = (LinearLayout) findViewById(R.id.page_select_gif); // ���ViewPager������������ PagerAdapter mPagerAdapter = new PagerAdapter() { @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public int getCount() { return grids.size(); } @Override public void destroyItem(View container, int position, Object object) { ((ViewPager) container).removeView(grids.get(position)); } @Override public Object instantiateItem(View container, int position) { ((ViewPager) container).addView(grids.get(position)); return grids.get(position); } @Override public void finishUpdate(View arg0) { // TODO Auto-generated method stub } @Override public void restoreState(Parcelable arg0, ClassLoader arg1) { // TODO Auto-generated method stub } @Override public Parcelable saveState() { // TODO Auto-generated method stub return null; } @Override public void startUpdate(View arg0) { // TODO Auto-generated method stub } }; viewPager.setAdapter(mPagerAdapter); viewPager.setOnPageChangeListener(new GuidePageChangeListener()); } // ** ָ��ҳ��ļ����� */ class GuidePageChangeListener implements OnPageChangeListener { @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int arg0) { switch (arg0) { case 0: page1.setImageDrawable(getResources().getDrawable( R.drawable.dot_chosed)); page2.setImageDrawable(getResources().getDrawable( R.drawable.dot_nor)); break; case 1: if (isGif) setGifPage(page2, gView2, expressionImagesGif1, expressionImageNamesGif1); else setPage(page2, gView2, expressionImages1, expressionImageNames1); break; case 2: if (isGif) setGifPage(page3, gView3, expressionImagesGif2, expressionImageNamesGif2); else setPage(page3, gView3, expressionImages2, expressionImageNames2); break; } } } private void setPage(ImageView pageFocused, GridView gridView, final int[] expressionImages, final String[] expressionImageNames) { page1.setImageDrawable(getResources().getDrawable(R.drawable.dot_nor)); page2.setImageDrawable(getResources().getDrawable(R.drawable.dot_nor)); page3.setImageDrawable(getResources().getDrawable(R.drawable.dot_nor)); pageFocused.setImageDrawable(getResources().getDrawable( R.drawable.dot_chosed)); List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>(); // ����24������ for (int i = 0; i < 24; i++) { Map<String, Object> listItem = new HashMap<String, Object>(); listItem.put("image", expressionImages[i]); listItems.add(listItem); } SimpleAdapter simpleAdapter1 = new SimpleAdapter(getContext(), listItems, R.layout.singleexpression, new String[] { "image" }, new int[] { R.id.image }); gridView.setAdapter(simpleAdapter1); gridView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Bitmap bitmap = null; bitmap = BitmapFactory.decodeResource(getResources(), expressionImages[arg2 % expressionImages.length]); ImageSpan imageSpan = new ImageSpan(getContext(), bitmap); SpannableString spannableString = new SpannableString( expressionImageNames[arg2]); spannableString.setSpan(imageSpan, 0, expressionImageNames[arg2].length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // �༭���������� msgEditText.append(spannableString); } }); } private void setGifPage(ImageView pageFocused, GridView gridView, final int[] expressionImages, final String[] expressionImageNames) { page1.setImageDrawable(getResources().getDrawable(R.drawable.dot_nor)); page2.setImageDrawable(getResources().getDrawable(R.drawable.dot_nor)); page3.setImageDrawable(getResources().getDrawable(R.drawable.dot_nor)); pageFocused.setImageDrawable(getResources().getDrawable( R.drawable.dot_chosed)); List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>(); // ����24������ for (int i = 0; i < 12; i++) { Map<String, Object> listItem = new HashMap<String, Object>(); listItem.put("image", expressionImages[i]); listItems.add(listItem); } SimpleAdapter simpleAdapter = new SimpleAdapter(getContext(), listItems, R.layout.singleexpression_gif, new String[] { "image" }, new int[] { R.id.image }); gridView.setAdapter(simpleAdapter); gridView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { if (expressionListener!=null) { expressionListener.clickGif(expressionImageNames[arg2]); } //TODO // if (!XmppConnection.isConnectdAndAuth()) { // MyToast.makeText(getContext(), "�������粻�ȶ������Ժ�����", // Toast.LENGTH_SHORT); // } else { // XmppService.sendMsg(expressionImageNames[arg2]); // } } }); } public void setNoGif() { page_select_gif.setVisibility(View.GONE); } public void setGifListener(ExpressionListener expressionListener){ this.expressionListener = expressionListener; } }