/** * */ package com.photoshare.camera; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Collection; import java.util.Date; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Build; import android.os.Environment; import android.view.Gravity; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.widget.ImageView; import android.widget.LinearLayout; import com.photoshare.service.photos.EditPhotoType; import com.photoshare.tabHost.R; import com.photoshare.utils.FileTools; import com.photoshare.utils.Utils; /** * @author czj_yy * */ public class CameraView { private Context context; private View baseView; private Bitmap photo; private Bitmap decoratedPhoto; /** Crop View */ private ImageView photoView; // private ImageView mSubmitView; // private ImageView mCancleView; private LinearLayout photoToolsView; private static final String CAMERA_DIR = "/photoShare/"; /** * @param context * @param baseView */ public CameraView(Context context, View baseView) { super(); this.context = context; this.baseView = baseView; } public CameraView() { } public void applyView() { photoToolsView = (LinearLayout) baseView .findViewById(R.id.editPhotoToolsGallery); photoView = (ImageView) baseView.findViewById(R.id.editPhoto); // mSubmitView = (ImageView) baseView // .findViewById(R.id.editPhotoSubmitBtn); // mCancleView = (ImageView) baseView // .findViewById(R.id.editPhotoCancleBtn); // // mSubmitView.setOnClickListener(new OnClickListener() { // // public void onClick(View v) { // // TODO Auto-generated method stub // if (onCameraViewClick != null) { // onCameraViewClick.OnSubmitClick(); // } // } // }); // // mCancleView.setOnClickListener(new OnClickListener() { // // public void onClick(View v) { // // TODO Auto-generated method stub // if (onCameraViewClick != null) { // onCameraViewClick.OnCancleClick(); // } // } // }); applyImageTool(); } private void applyImageTool() { Collection<EditPhotoType> values = Arrays .asList(EditPhotoType.values()); for (EditPhotoType type : values) { photoToolsView.addView(insertImage(type)); } } public void DisappearPhotoTools() { photoToolsView.setVisibility(View.GONE); // mSubmitView.setVisibility(View.GONE); // mCancleView.setVisibility(View.GONE); } public void DisplayPhotoTools() { photoToolsView.setVisibility(View.VISIBLE); // mSubmitView.setVisibility(View.VISIBLE); // mCancleView.setVisibility(View.VISIBLE); } private View insertImage(final EditPhotoType type) { LinearLayout layout = new LinearLayout(context); layout.setLayoutParams(new LayoutParams(320, 320)); layout.setGravity(Gravity.CENTER); ImageView imageView = new ImageView(context); imageView.setLayoutParams(new LayoutParams(300, 300)); imageView.setBackgroundResource(type.getImageId()); imageView.setOnClickListener(new OnClickListener() { public void onClick(View v) { if (onCameraViewClick != null) { onCameraViewClick.OnToolsClick(type, photo); } } }); layout.addView(imageView); return layout; } private String mCurrentPhotoPath; private String storageDir = Utils.SDCARD_ABSOLUTE_PATH + File.separator + Utils.APP_NAME + Utils.DIR_USR; private static final String JPEG_FILE_PREFIX = "IMG_"; private static final String JPEG_FILE_SUFFIX = ".jpg"; private File getAlbumDir() { File destDir = FileTools.makeDir(storageDir); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO) { destDir = getFroyoAlbumStorageDir(Utils.APP_NAME); } else { destDir = getBaseAlbumStorageDir(Utils.APP_NAME); } return destDir; } private File createImageFile() throws IOException { // Create an image file name String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss") .format(new Date()); String imageFileName = JPEG_FILE_PREFIX + timeStamp + "_"; File albumF = getAlbumDir(); File imageF = File.createTempFile(imageFileName, JPEG_FILE_SUFFIX, albumF); return imageF; } public File setUpPhotoFile() throws IOException { File f = createImageFile(); mCurrentPhotoPath = f.getAbsolutePath(); return f; } public void galleryAddPic() { Intent mediaScanIntent = new Intent( "android.intent.action.MEDIA_SCANNER_SCAN_FILE"); File f = new File(mCurrentPhotoPath); Uri contentUri = Uri.fromFile(f); mediaScanIntent.setData(contentUri); context.sendBroadcast(mediaScanIntent); } public void setPic() { /* There isn't enough memory to open up more than a couple camera photos */ /* So pre-scale the target bitmap into which the file is decoded */ /* Get the size of the ImageView */ int targetW = photoView.getWidth(); int targetH = photoView.getHeight(); /* Get the size of the image */ BitmapFactory.Options bmOptions = new BitmapFactory.Options(); bmOptions.inJustDecodeBounds = true; BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions); int photoW = bmOptions.outWidth; int photoH = bmOptions.outHeight; /* Figure out which way needs to be reduced less */ int scaleFactor = 1; if ((targetW > 0) || (targetH > 0)) { scaleFactor = Math.min(photoW / targetW, photoH / targetH); } /* Set bitmap options to scale the image decode target */ bmOptions.inJustDecodeBounds = false; bmOptions.inSampleSize = scaleFactor; bmOptions.inPurgeable = true; /* Decode the JPEG file into a Bitmap */ Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions); photo = bitmap; /* Associate the Bitmap to the ImageView */ photoView.setImageBitmap(photo); photoView.setVisibility(View.VISIBLE); } public void setmCurrentPhotoPath(String mCurrentPhotoPath) { this.mCurrentPhotoPath = mCurrentPhotoPath; } public String getmCurrentPhotoPath() { return mCurrentPhotoPath; } public void setContext(Context context) { this.context = context; } public void setBaseView(View baseView) { this.baseView = baseView; } public boolean isCurrentPhotoPathNull() { if (mCurrentPhotoPath != null && !mCurrentPhotoPath.equals("")) { return false; } return true; } public Bitmap getPhoto() { return photo; } public void setPhoto(Bitmap photo) { this.photo = photo; photoView.setImageBitmap(photo); photoView.setVisibility(View.VISIBLE); } public void setPhoto(Drawable photo) { BitmapDrawable dP = (BitmapDrawable) photo; if (dP != null) { this.photo = dP.getBitmap(); photoView.setImageBitmap(this.photo); photoView.setVisibility(View.VISIBLE); } } public void setDecoratedPhoto(Drawable photo) { BitmapDrawable dP = (BitmapDrawable) photo; if (dP != null) { this.decoratedPhoto = dP.getBitmap(); photoView.setImageBitmap(dP.getBitmap()); photoView.setVisibility(View.VISIBLE); } } private File getFroyoAlbumStorageDir(String albumName) { return new File( Environment .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), albumName); } private File getBaseAlbumStorageDir(String albumName) { return new File(Environment.getExternalStorageDirectory() + CAMERA_DIR + albumName); } private OnCameraViewClick onCameraViewClick; public void registerCameraClickListener(OnCameraViewClick onCameraViewClick) { this.onCameraViewClick = onCameraViewClick; } public interface OnCameraViewClick { public void OnSubmitClick(); public void OnCancleClick(); public void OnToolsClick(EditPhotoType type, Bitmap map); } }