Рубрики
Без рубрики

Как создать приложение для Android: картинка собирание

Еще раз привет (x2) всем! В последнем посте мы говорили о datepicker и nametextview, bec… С тегом android, java, учебное пособие.

Еще раз привет (x2) всем!

В последнем посте мы говорим о datepicker и nametextview, потому что мы уже рассматриваем переключатели, а затем проверим изменение фотографии профиля. Мы будем использовать Круговой просмотр изображений из пакета mikhaellopez; Glide – простой способ загрузки и кэширования изображений; Image Cropper – действительно полезная библиотека, если вы хотите обрезать изображение, чтобы оно поместилось внутри компонента; и Dexter – действительно простой способ запрашивать разрешения.

Давайте начнем со следующей реализации внутри приложения сборка gradle

implementation 'com.mikhaellopez:circularimageview:4.0.1'
implementation 'com.github.bumptech.glide:glide:4.9.0'
implementation 'com.karumi:dexter:5.0.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
api 'com.theartofdev.edmodo:android-image-cropper:+'

На нашем главном контенте перейдите в текстовое издание и добавьте компонент CiruclarImageView, определите размер по атрибутам width и height. Также выберите изображение для визуализации компонента в макете дизайна.


Я установил изображение по умолчанию на круглое изображение. Я получаю это от material.io ресурсы бесплатны.

Компоненту нужна логика, позволяющая пользователю сделать снимок или выбрать его из галереи. Функциональность выполняется с помощью Android image cropper, дополнительно в манифест будут добавлены разрешения.



    
    
    

    
        ....
        
    


Чтобы сохранить читаемость в проекте, мы создадим пакет с именем utils, в котором будет находиться логика выбора фотографий. Создание пакета выполняется щелчком правой кнопкой мыши по основному пакету, затем по новому и по пакету. Введите имя, в моем случае это utils.

Как только пакет будет создан, снова щелкните правой кнопкой мыши на пакете utils и выберите опцию Java Class

Выберите имя для класса (мое – photo), после этого процесса мы запишем небольшую функцию, которая вызовет диалоговое окно, в котором пользователь сможет сделать фотографию или выбрать ее из разных источников. Метод статичен, потому что нет необходимости создавать объект и сохранять его в памяти.

public static void choosePhoto(Activity activity) {
    CropImage.activity()
             .setGuidelines(CropImageView.Guidelines.ON)
             .start(activity);
}

Впоследствии, в классе java Main activity, мы добавим методы severus, описанные ниже.

Во-первых, метод, который вызывается при щелчке на круговом представлении изображения. Как я уже говорил в предыдущем посте, чтобы создать метод для вызова события onClick, он должен быть общедоступным, void, с формальным параметром типа View. Внутри этого метода он вызовет наш метод, отображающий диалоговое окно для пользователя, чтобы позволить ему выбрать источник для своей фотографии.

public void showPictureDialog(View view) {
    photo.choosePhoto(this);
}

Когда изображение выбрано, мы переопределяем метод onActivityResult, который помещает изображение в Круговой вид изображения при выборе.

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == this.RESULT_CANCELED) {
        return;
    } else if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
        CropImage.ActivityResult result = CropImage.getActivityResult(data);
        if (resultCode == RESULT_OK) {
            Uri resultUri = result.getUri();
            try {
                Bitmap bitmap = MediaStore.Images.Media
                                 .getBitmap(this.getContentResolver(),resultUri);
                Glide.with(this).load(bitmap).into(imageview);
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
            Exception error = result.getError();
        }
    }
}

Кроме того, пользователь должен предоставить нам достаточные разрешения для доступа к своему медиаконтенту. Dexter – это еще одна библиотека, которая упрощает эту задачу, реализуя пару методов. (Я объясню самую простую часть, поэтому, если вы хотите углубиться во все доступные функции, пожалуйста, обратитесь к его документации, я перечислю все библиотеки в конце этого поста)

private void  requestMultiplePermissions(){
    Dexter.withActivity(this)
          .withPermissions(
                    Manifest.permission.CAMERA,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
                    Manifest.permission.READ_EXTERNAL_STORAGE)
           .withListener(
               new MultiplePermissionsListener() {
                   @Override
                   public void onPermissionsChecked(MultiplePermissionsReport report) {
                       // check if all permissions are granted
                       if (report.areAllPermissionsGranted()) {
                           Toast.makeText(getApplicationContext(), 
                                       "All permissions are granted by user!", 
                                       Toast.LENGTH_SHORT).show();
                        }

//                      check for permanent denial of any permission
                        if (report.isAnyPermissionPermanentlyDenied()) {
                            // show alert dialog navigating to Settings

                        }
                    }

                    @Override
                    public void onPermissionRationaleShouldBeShown(
                                   List permissions, 
                                   PermissionToken token) {
                        token.continuePermissionRequest();
                    }
                }).
                withErrorListener(new PermissionRequestErrorListener() {
                    @Override
                    public void onError(DexterError error) {
                        Toast.makeText(getApplicationContext(), 
                                      "Some Error! ", 
                                      Toast.LENGTH_SHORT).show();
                    }
                })
          .onSameThread()
          .check();
}

Мы используем основной объект Dexter, сообщая им, что нам нужно разрешение на камеру, в дополнение к записи и чтению хранилища. Можно реализовать прослушиватель, там вы можете выполнять действия, когда пользователь запрещает доступ или вы хотите показать пользователю диалоговое окно разрешений. Наконец, при возникновении ошибки вы можете отобразить сообщение, связанное с другими подпрограммами. Метод, который мы только что создали, будет вызываться внутри метода onCreate, важно отметить, что вы должны инициализировать представление изображения, в противном случае вы получите исключение с нулевым указателем.

И все, теперь у вас есть полнофункциональный инструмент выбора изображений, который позволяет либо снимать их с помощью камеры, либо выбирать из внутреннего/внешнего хранилища.

Как я уже сказал, вот ссылки на документацию всех библиотек.

Ловкость Скольжение CircularImageView Средство обрезки изображений CircularImageView

Вот ссылка на проект github

Оригинал: “https://dev.to/edrome/how-to-create-an-android-app-picture-picking-4501”