package com.smartdot.cgt.view; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.util.AttributeSet; import android.util.Log; import android.view.View; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import com.smartdot.cgt.R; import com.smartdot.cgt.util.ApplicationMain; public class ImagesLayout extends LinearLayout { private static final String FILEDIRPATH = "tempimageview"; public ImagesLayout(Context context) { super(context); } public ImagesLayout(Context context, AttributeSet attr) { super(context, attr); } private ArrayList < Bitmap > selectedImages = new ArrayList < Bitmap >(); private ImageView image1; private ImageView image2; private ImageView image3; private ImageButton closeBtn1; private ImageButton closeBtn2; private ImageButton closeBtn3; private OnCountChange onCountChange; private OnPreviewImage onPreviewImage; private boolean hadSaved = false; private ArrayList < String > pathList; public void setHadSaved(boolean hadSaved) { if (hadSaved && !this.hadSaved) { this.hadSaved = hadSaved; pathList = new ArrayList < String >(); int i = 0; String filePath = ApplicationMain.getInstance().getConfigPath(FILEDIRPATH); File file = new File(filePath); if (!file.exists()) { file.mkdirs(); } for (Bitmap bitmap : selectedImages) { File imageFile = new File(filePath, Integer.toString(i) + ".jpg"); try { imageFile.createNewFile(); OutputStream fileOutput = new FileOutputStream(imageFile); bitmap.compress(CompressFormat.JPEG, 80, fileOutput); fileOutput.flush(); fileOutput.close(); pathList.add(imageFile.getAbsolutePath()); } catch (IOException e) { e.printStackTrace(); } i++; } } } public void setOnPreviewImage(OnPreviewImage onPreviewImage) { this.onPreviewImage = onPreviewImage; } public void setOnCountChange(OnCountChange onCountChange) { this.onCountChange = onCountChange; } public Bitmap[] getSelectedImages() { Bitmap[] result = new Bitmap[selectedImages.size()]; return selectedImages.toArray(result); } public ArrayList < String > getSelectedImagesPath() { if (!hadSaved) { setHadSaved(true); } return pathList; } public int getSelectedImageCount() { return selectedImages.size(); } private OnClickListener closeListener = new OnClickListener() { @Override public void onClick(View arg0) { if (arg0 == closeBtn1) { removeSelectedImage(0); } else if (arg0 == closeBtn2) { removeSelectedImage(1); } else if (arg0 == closeBtn3) { removeSelectedImage(2); } } }; private OnClickListener previewListener = new OnClickListener() { @Override public void onClick(View arg0) { if (arg0 == image1) { previewImage(0); } else if (arg0 == image2) { previewImage(1); } else if (arg0 == image3) { previewImage(2); } } }; /** * @param i * @return 是否可以继续添加图片 */ public boolean removeSelectedImage(int i) { if (this.selectedImages.size() > i) { this.selectedImages.remove(i); redrawSelectedImages(); } if (onCountChange != null) onCountChange.getNowCount(this.selectedImages.size()); return this.selectedImages.size() < 3; } protected void previewImage(int i) { if (selectedImages.size() > i) { if (onPreviewImage != null) { onPreviewImage.previewImage(i); } } } /** * @param selectedImage * @return 是否可以继续添加图片 */ public boolean addSelectedImage(Bitmap selectedImage) { this.selectedImages.add(selectedImage); redrawSelectedImages(); if (onCountChange != null) onCountChange.getNowCount(this.selectedImages.size()); if (this.selectedImages.size() >= 3) { return false; } else { return true; } } private void redrawSelectedImages() { try { image1.setImageBitmap(this.selectedImages.size() > 0 ? this.selectedImages.get(0) : null); image2.setImageBitmap(this.selectedImages.size() > 1 ? this.selectedImages.get(1) : null); image3.setImageBitmap(this.selectedImages.size() > 2 ? this.selectedImages.get(2) : null); if (this.selectedImages.size() > 0) this.requestFocus(300); } catch (Exception e) { Log.w("XmlHelper", e.toString()); } hadSaved = false; } @Override protected void onFinishInflate() { super.onFinishInflate(); if (image1 == null) { image1 = (ImageView) this.findViewById(R.id.image1); image2 = (ImageView) this.findViewById(R.id.image2); image3 = (ImageView) this.findViewById(R.id.image3); image1.setOnClickListener(previewListener); image2.setOnClickListener(previewListener); image3.setOnClickListener(previewListener); closeBtn1 = (ImageButton) this.findViewById(R.id.closeBtn1); closeBtn2 = (ImageButton) this.findViewById(R.id.closeBtn2); closeBtn3 = (ImageButton) this.findViewById(R.id.closeBtn3); closeBtn1.setOnClickListener(closeListener); closeBtn2.setOnClickListener(closeListener); closeBtn3.setOnClickListener(closeListener); } } public abstract class OnCountChange { public abstract void getNowCount(int nowCount); } public abstract class OnPreviewImage { public abstract void previewImage(int viewIndex); } }