Good. Honey, I put all my Crop Image code on Android. This is a global variable.
//This For Image Crop /** * Uri for set image crop option . */ private Uri mImageCaptureUri; /** * int for set key and get key from result activity . */ public final int CROP_FROM_CAMERA = 0; /** * Bitmap for apply Crop Operation Result. */ private Bitmap _tempOpration; //This is Crop Method. /** * Method for apply Crop . * @param filePath - String path of file . */ private void doCrop(String filePath){ try{ //New Flow mImageCaptureUri = Uri.fromFile(new File(filePath)); final ArrayList<CropOption> cropOptions = new ArrayList<CropOption>(); Intent intent = new Intent("com.android.camera.action.CROP"); intent.setType("image/*"); List<ResolveInfo> list = getPackageManager().queryIntentActivities( intent, 0 ); int size = list.size(); if (size == 0) { Toast.makeText(this, "Can not find image crop app", Toast.LENGTH_SHORT).show(); return; } else { intent.setData(mImageCaptureUri); intent.putExtra("outputX", 300); intent.putExtra("outputY", 300); intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra("scale", true); intent.putExtra("return-data", true); if (size == 1) { Intent i = new Intent(intent); ResolveInfo res = list.get(0); i.setComponent( new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); startActivityForResult(i, CROP_FROM_CAMERA); } else { for (ResolveInfo res : list) { final CropOption co = new CropOption(); co.title = getPackageManager().getApplicationLabel(res.activityInfo.applicationInfo); co.icon = getPackageManager().getApplicationIcon(res.activityInfo.applicationInfo); co.appIntent= new Intent(intent); co.appIntent.setComponent( new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); cropOptions.add(co); } CropOptionAdapter adapter = new CropOptionAdapter(getApplicationContext(), cropOptions); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Choose Crop App"); builder.setAdapter( adapter, new DialogInterface.OnClickListener() { public void onClick( DialogInterface dialog, int item ) { startActivityForResult( cropOptions.get(item).appIntent, CROP_FROM_CAMERA); } }); builder.setOnCancelListener( new DialogInterface.OnCancelListener() { public void onCancel( DialogInterface dialog ) { if (mImageCaptureUri != null ) { getContentResolver().delete(mImageCaptureUri, null, null ); mImageCaptureUri = null; } } } ); AlertDialog alert = builder.create(); alert.show(); } } } catch (Exception ex) { genHelper.showErrorLog("Error in Crop Function-->"+ex.toString()); } }
This is another use of the class used to determine the target yield action in an application.
Class CropOption.
public class CropOption { public CharSequence title; public Drawable icon; public Intent appIntent; }
this is used to display the list.
Cropoptionadapter
public class CropOptionAdapter extends ArrayAdapter<CropOption> { private ArrayList<CropOption> mOptions; private LayoutInflater mInflater; public CropOptionAdapter(Context context, ArrayList<CropOption> options) { super(context, R.layout.crop_selector, options); mOptions = options; mInflater = LayoutInflater.from(context); } @Override public View getView(int position, View convertView, ViewGroup group) { if (convertView == null) convertView = mInflater.inflate(R.layout.crop_selector, null); CropOption item = mOptions.get(position); if (item != null) { ((ImageView) convertView.findViewById(R.id.iv_icon)).setImageDrawable(item.icon); ((TextView) convertView.findViewById(R.id.tv_name)).setText(item.title); return convertView; } return null; } }
Layout File for CropOptionAdapter
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:gravity="center_vertical"> <ImageView android:id="@+id/iv_icon" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/tv_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=""/> </LinearLayout>
This result resultActivity.witch gives the cropping image.
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode != RESULT_OK) return; switch (requestCode) { case CROP_FROM_CAMERA: if (data == null) { genHelper.showToast("No Crop Activity in This"); return; } final Bundle extras = data.getExtras(); if (extras != null) { try { _tempOpration=extras.getParcelable("data"); imageLayout.setImageBitmap(_tempOpration); _tempOpration=null; } catch (Exception e) { e.printStackTrace(); } } break; } }
// Do This Type This works in my live application.
genHelper.showToast ("No Crop Activity in This");
is my general class that helps display toasts and error logs.
Best luck.