25 April, 2014

Image Crop

Crop Options: From Camera or Gallery

builder.setTitle("Select Image");     // This is Button and its adapterClickListener
builder.setAdapter( adapter, new DialogInterface.OnClickListener() 
{
public void onClick( DialogInterface dialog, int item )

    //pick from camera
if (item == 0) 
{
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

mImageCaptureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),
  "tmp_avatar_" + String.valueOf(System.currentTimeMillis()) + ".jpg"));

intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri);

try 
{
intent.putExtra("return-data", true);

startActivityForResult(intent, PICK_FROM_CAMERA);

catch (ActivityNotFoundException e)
{
e.printStackTrace();
}


else

     //pick from file
Intent intent = new Intent();

               intent.setType("image/*");
               intent.setAction(Intent.ACTION_GET_CONTENT);
               
               startActivityForResult(Intent.createChooser(intent, "Complete action using"), PICK_FROM_FILE);
}
}

} );



Crop Method

private void doCrop()
    {
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", 200);
            intent.putExtra("outputY", 200);
            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()
       {
           @Override
           public void onCancel( DialogInterface dialog ) 
           {
              
               if (mImageCaptureUri != null ) 
               {
                   getContentResolver().delete(mImageCaptureUri, null, null );
                   mImageCaptureUri = null;
               }
           }
       } );
       
       AlertDialog alert = builder.create();
       
       alert.show();
        }
        }
}


java Files
CropOption.java
CropOptionAdapter.java
MainActivity.java

xml Files

crop_selector.xml
main.xml
















Download