Galera,
Acompanho o fórum há bastante tempo e aqui já tive diversas dúvidas esclarecidas, porém desta vez não encontrei nada (nem aqui nem na internet) que se encaixe com o que estou procurando. Gostaria de saber se é possível cortar livremente um retângulo de uma imagem selecionada da galeria do Android. Olhando na internet, vi alguns exemplos utilizando o com.android.camera.action.CROP, no entanto estes exemplos apenas possibilitam o corte quadrado, da mesma forma que é feito quando se quer colocar um papel de parede no Android. Eu preciso que o ajuste nas laterais e nas verticais sejam independentes um do outro, quando se seleciona “cortar” (ou similares, esta opção depende da versão do Android) na edição de imagens da galeria.
Segue o trecho onde é feito o CROP:
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", 100);
intent.putExtra("aspectY", 100);
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));
this.startActivityForResult(i, Constantes.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, Constantes.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();
}
}
}
Acredito que seja alguma configuração simples, provavelmente ajustada por .putExtra, porém, sou iniciante em Android e não conheço o framework. Alguém tem alguma solução?