2017-02-08 5 views
2

Пожалуйста, помогите мне, у меня есть письменный код до сих пор, который может отображать изображение как с камеры, так и с галереи и отображать ее, но мне трудно обрезать его. Я пытаюсь использовать стороннюю андроидную библиотеку под названием android image cropper, но мне сложно ее реализовать. Я играл с кодом, но ничего полезного не придумал. другими словами, я пытаюсь добиться эффекта, который можно получить в whasap, когда вы нажимаете кнопку, чтобы загрузить изображение профиля, оно устанавливает его обрезку, а затем отображает круговой вид изображения. вот ссылка на библиотеку android android image cropper. любая помощь будет оценена благодарю вас всех.Как выбрать изображение с камеры и галереи, обрезать его и установить на изображение

вот мой код Java

public class MainActivity extends Activity { 

    private int REQUEST_CAMERA = 0, SELECT_FILE = 1; 
    private Button btnSelect; 
    private ImageView ivImage; 
    private String userChoosenTask; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     btnSelect = (Button) findViewById(R.id.btnSelectPhoto); 
     btnSelect.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       selectImage(); 
      } 
     }); 
     ivImage = (ImageView) findViewById(R.id.ivImage); 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
     switch (requestCode) { 
      case Utility.MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE: 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        if(userChoosenTask.equals("Take Photo")) 
         cameraIntent(); 
        else if(userChoosenTask.equals("Choose from Library")) 
         galleryIntent(); 
       } else { 
        //code for deny 
       } 
       break; 
     } 
    } 

    private void selectImage() { 
     final CharSequence[] items = { "Take Photo", "Choose from Library", 
       "Cancel" }; 

     AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
     builder.setTitle("Add Photo!"); 
     builder.setItems(items, new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int item) { 
       boolean result=Utility.checkPermission(MainActivity.this); 

       if (items[item].equals("Take Photo")) { 
        userChoosenTask ="Take Photo"; 
        if(result) 
         cameraIntent(); 

       } else if (items[item].equals("Choose from Library")) { 
        userChoosenTask ="Choose from Library"; 
        if(result) 
         galleryIntent(); 

       } else if (items[item].equals("Cancel")) { 
        dialog.dismiss(); 
       } 
      } 
     }); 
     builder.show(); 
    } 

    // Ezphoto picker in action 

    private void galleryIntent() 
    { 
     EZPhotoPickConfig config = new EZPhotoPickConfig(); 
     config.photoSource = PhotoSource.GALERY; 
     config.needToExportThumbnail = true; 
     config.exportingThumbSize = 200; 
     config.exportingSize = 1000; 
     EZPhotoPick.startPhotoPickActivity(MainActivity.this, config); 
    } 

    private void cameraIntent() 
    { 
     EZPhotoPickConfig config = new EZPhotoPickConfig(); 
     config.photoSource = PhotoSource.CAMERA; 
     config.exportingSize = 1000; 
     EZPhotoPick.startPhotoPickActivity(MainActivity.this, config); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if(resultCode != RESULT_OK){ 
      return; 
     } 

     if(requestCode == EZPhotoPick.PHOTO_PICK_REQUEST_CODE){ 
      try { 
       Bitmap pickedPhoto = new EZPhotoPickStorage(this).loadLatestStoredPhotoBitmapThumbnail(); 
       ivImage.setImageBitmap(pickedPhoto); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
} 

вот мой XML-код

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:padding="10dp" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:padding="5dp" > 

     <Button 
      android:id="@+id/btnSelectPhoto" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="Select Photo" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:orientation="vertical" 
     android:padding="10dp" > 

     <ImageView 
      android:id="@+id/ivImage" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/ic_launcher" /> 
    </LinearLayout> 

</LinearLayout> 

ответ

0

вы можете попробовать эту библиотеку для кадрирования изображений

https://github.com/jdamcd/android-crop

голос, если вам нравится мое предложение.

0

Источник: Crop image in android

Вот код

private void performCrop(Uri picUri) { 
    try { 
     Intent cropIntent = new Intent("com.android.camera.action.CROP"); 
     // indicate image type and Uri 
     cropIntent.setDataAndType(picUri, "image/*"); 
     // set crop properties here 
     cropIntent.putExtra("crop", true); 
     // indicate aspect of desired crop 
     cropIntent.putExtra("aspectX", 1); 
     cropIntent.putExtra("aspectY", 1); 
     // indicate output X and Y 
     cropIntent.putExtra("outputX", 128); 
     cropIntent.putExtra("outputY", 128); 
     // retrieve data on return 
     cropIntent.putExtra("return-data", true); 
     // start the activity - we handle returning in onActivityResult 
     startActivityForResult(cropIntent, PIC_CROP); 
    } 
    // respond to users whose devices do not support the crop action 
    catch (ActivityNotFoundException anfe) { 
     // display an error message 
     String errorMessage = "Whoops - your device doesn't support the crop action!"; 
     Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT); 
     toast.show(); 
    } 
} 

заявляют:

final int PIC_CROP = 1; 

наверху.

В методе результат onActivity, писать этот код:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == PIC_CROP) { 
     if (data != null) { 
      // get the returned data 
      Bundle extras = data.getExtras(); 
      // get the cropped bitmap 
      Bitmap selectedBitmap = extras.getParcelable("data"); 

      imgView.setImageBitmap(selectedBitmap); 
     } 
    } 
} 

Источник: Crop image in android

Другие полезные ссылки:

Надеется, что это помогает! Удачи!

+0

@ S Kharbanda пожалуйста, еще одна путаница, где я объявляю final int PIC_CROP = 1; –

+0

и как я объявляю это спасибо за вашу заботу. –

+0

Объявите 'int PIC_CROP = 1;' вверху, где вы объявили 'private int REQUEST_CAMERA = 0, SELECT_FILE = 1;'. Так же, как это, но это всего лишь 1 переменная вместо 2. –