package com.mogujie.tt.ui.activity; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.mogujie.tt.R; import com.mogujie.tt.adapter.album.ImageGridAdapter; import com.mogujie.tt.adapter.album.ImageItem; import com.mogujie.tt.cache.biz.CacheHub; import com.mogujie.tt.entity.MessageInfo; import com.mogujie.tt.imlib.service.IMService; import com.mogujie.tt.imlib.utils.IMUIHelper; import com.mogujie.tt.log.Logger; import com.mogujie.tt.ui.tools.DisplayBitmapCache; import com.mogujie.tt.ui.utils.IMServiceHelper; import com.mogujie.tt.ui.utils.IMServiceHelper.OnIMServiceListner; import com.mogujie.tt.widget.CustomViewPager; /** * @Description 图片预览 * @author Nana * @date 2014-5-9 */ public class PreviewActivity extends Activity implements OnPageChangeListener, OnIMServiceListner { private CustomViewPager viewPager; private ImageView[] tips; private ImageView[] mImageViews; private ViewGroup group; private ImageView back; private ImageView select; private TextView send; private final ImageGridAdapter adapter = ImageGridActivity.getAdapter(); private Map<Integer, Integer> removePosition = new HashMap<Integer, Integer>(); private int curImagePosition = -1; private IMServiceHelper imServiceHelper = new IMServiceHelper(); private Logger logger = Logger.getLogger(PreviewActivity.class); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); imServiceHelper.connect(this, null, IMServiceHelper.INTENT_NO_PRIORITY, this); setContentView(R.layout.tt_activity_preview); initView(); loadView(); } private void initView() { viewPager = (CustomViewPager) findViewById(R.id.viewPager); group = (ViewGroup) findViewById(R.id.viewGroup); back = (ImageView) findViewById(R.id.back_btn); select = (ImageView) findViewById(R.id.select_btn); send = (TextView) findViewById(R.id.send_btn); setSendText(adapter.getSelectMap().size()); send.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Iterator<Integer> iterator = removePosition.keySet().iterator(); while (iterator.hasNext()) { int key = (Integer) iterator.next(); if (adapter.getSelectMap().containsKey(key)) adapter.getSelectMap().remove(key); } removePosition.clear(); if (adapter.getSelectMap().size() > 0) { List<MessageInfo> messageList = new ArrayList<MessageInfo>(); Iterator<Integer> iter = adapter.getSelectMap().keySet().iterator(); while (iter.hasNext()) { int position = iter.next(); ImageItem imgItem = adapter.getSelectMap().get(position); MessageInfo msg = ImageGridActivity.drawMessageInfo(PreviewActivity.this, imgItem); messageList.add(msg); } ImageGridActivity.setSendText(0); ImageGridActivity.setAdapterSelectedMap(null); IMUIHelper.SessionInfo sessionInfo = CacheHub.getInstance().getSessionInfo(); if (sessionInfo != null) { logger.e("pic#sessionInfo is null"); return; } IMService imService = imServiceHelper.getIMService(); if (imService != null) { imService.getMessageManager().sendImages(sessionInfo.getSessionId(), sessionInfo.getSessionType(), messageList); } Intent data = new Intent(); data.putExtra("finish", true); setResult(RESULT_OK, data); PreviewActivity.this.finish(); } else { Toast.makeText(PreviewActivity.this, R.string.need_choose_images, Toast.LENGTH_SHORT).show(); } } }); back.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { @SuppressWarnings("rawtypes") Iterator it = removePosition.keySet().iterator(); while (it.hasNext()) { int key = (Integer) it.next(); if (adapter.getSelectMap().containsKey(key)) adapter.getSelectMap().remove(key); } ImageGridActivity.setAdapterSelectedMap(ImageGridActivity.getAdapter().getSelectMap()); removePosition.clear(); PreviewActivity.this.finish(); } }); select.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (adapter.getSelectMap().containsKey(curImagePosition)) { ImageItem item = adapter.getSelectMap().get(curImagePosition); item.setSelected(!item.isSelected()); if (item.isSelected()) { int selTotal = adapter.getSelectTotalNum(); adapter.setSelectTotalNum(++selTotal); if (removePosition.containsKey(curImagePosition)) { removePosition.remove(curImagePosition); } ImageGridActivity.setSendText(selTotal); setSendText(selTotal); select.setImageResource(R.drawable.tt_album_img_selected); } else { int selTotal = adapter.getSelectTotalNum(); adapter.setSelectTotalNum(--selTotal); removePosition.put(curImagePosition, curImagePosition); ImageGridActivity.setSendText(selTotal); setSendText(selTotal); select.setImageResource(R.drawable.tt_album_img_select_nor); } } } }); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); imServiceHelper.disconnect(this); } private void setSendText(int selTotal) { if (selTotal > 0) { send.setText(getResources().getString(R.string.send) + "(" + selTotal + ")"); } else { send.setText(getResources().getString(R.string.send)); } } private void loadView() { mImageViews = new ImageView[adapter.getSelectMap().size()]; if (adapter.getSelectMap().size() > 1) { tips = new ImageView[adapter.getSelectMap().size()]; for (int i = 0; i < tips.length; i++) { ImageView imageView = new ImageView(this); imageView.setLayoutParams(new LayoutParams(10, 10)); tips[i] = imageView; if (i == 0) { tips[i].setBackgroundResource(R.drawable.tt_default_dot_down); } else { tips[i].setBackgroundResource(R.drawable.tt_default_dot_up); } LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); layoutParams.leftMargin = 5; layoutParams.rightMargin = 5; group.addView(imageView, layoutParams); } } Iterator<?> it = adapter.getSelectMap().keySet().iterator(); int index = -1; while (it.hasNext()) { int key = (Integer) it.next(); ImageItem item = adapter.getSelectMap().get(key); ImageView imageView = new ImageView(this); mImageViews[++index] = imageView; Bitmap bmp = DisplayBitmapCache.getInstance(PreviewActivity.this).get(item.getImagePath()); if (bmp == null) bmp = DisplayBitmapCache.getInstance(PreviewActivity.this).get(item.getThumbnailPath()); if (bmp != null) imageView.setImageBitmap(bmp); if (index == 0) { curImagePosition = key; } } // 设置view pager viewPager.setAdapter(new PreviewAdapter()); viewPager.setOnPageChangeListener(this); if (adapter.getSelectMap().size() == 1) { viewPager.setScanScroll(false); } else { viewPager.setScanScroll(true); } viewPager.setCurrentItem(0); } @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } private void setImageBackground(int selectItems) { for (int i = 0; i < tips.length; i++) { if (i == selectItems) { tips[i].setBackgroundResource(R.drawable.tt_default_dot_down); } else { tips[i].setBackgroundResource(R.drawable.tt_default_dot_up); } } } @Override public void onPageSelected(int position) { @SuppressWarnings("rawtypes") Iterator it = adapter.getSelectMap().keySet().iterator(); int index = -1; while (it.hasNext()) { int key = (Integer) it.next(); if (++index == position) { curImagePosition = key;// 对应适配器中图片列表的真实位置 if (adapter.getSelectMap().get(key).isSelected()) { select.setImageResource(R.drawable.tt_album_img_selected); } else { select.setImageResource(R.drawable.tt_album_img_select_nor); } } } setImageBackground(position); } public class PreviewAdapter extends PagerAdapter { @Override public int getCount() { return mImageViews.length; } @Override public boolean isViewFromObject(View view, Object obj) { return view == obj; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public Object instantiateItem(View container, int position) { try { ((ViewGroup) container).addView(mImageViews[position]); } catch (Exception e) { } return mImageViews[position]; } } @Override public void onAction(String action, Intent intent, BroadcastReceiver broadcastReceiver) { // TODO Auto-generated method stub } @Override public void onIMServiceConnected() { // TODO Auto-generated method stub } }