Как исправить высоту обрезанного выделенного вида вместо изменения с помощью загруженного изображения?

Я использую следующий пример кода, https://github.com/mklimek/android-crop/tree/newfeature_fied_size_crop. Это дает представление обрезки фиксированного размера (то есть HighlightView). Но проблема в том, что этот highlightView исправлен в зависимости от загруженного изображения. Ниже приведены снимки экрана с двумя загруженными изображениями разных размеров.

Я использовал приведенные ниже строки кода, чтобы исправить размер HighlightView:

 private void beginCrop(Uri source) {
    Uri outputUri = Uri.fromFile(new File(getCacheDir(), "cropped"));
    new Crop(source).output(outputUri).asRectangle().withFixedSize(100, 210).start(this);
 }

Метод withFixedSize() используется для исправления размера обрезанной области, мы не можем изменить размер этого представления, если мы используем этот метод, это нормально. Но эта обрезанная область должна быть зафиксирована с шириной =100, высотой =210, она не должна меняться в зависимости от загруженного изображения.

Загруженное изображение большого размера имеет небольшой размер обрезки (например, HighlightView):

Загруженное изображение небольшого размера имеет большой размер обрезки (т.е. HighlightView):

Мое требование - я должен исправить размер обрезанной области, я не должен изменять его размер. Я искал в мире Google. Но я не нашел решения.

Пожалуйста помоги мне с этим.

1 ответ

Посетите это: https://github.com/jdamcd/android-crop

урожай

Crop.of(inputUri, outputUri).asSquare().start(activity)

Прослушайте результат обрезки (см. Пример проекта, если вы хотите выполнить обработку ошибок):

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent result) {
    if (requestCode == Crop.REQUEST_CROP && resultCode == RESULT_OK) {
        doSomethingWithCroppedImage(outputUri);
    }
}

Для настройки экрана обрезки предусмотрены некоторые атрибуты. Смотрите пример темы проекта.

Выбирать

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

Crop.pickImage(activity)

зависимость

AAR публикуется в Maven Central:

compile 'com.soundcloud.android:android-crop:1.0.1@aar'

Java-код:

public class MainActivity extends Activity {

    private ImageView resultView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        resultView = (ImageView) findViewById(R.id.result_image);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == R.id.action_select) {
            resultView.setImageDrawable(null);
            Crop.pickImage(this);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent result) {
        if (requestCode == Crop.REQUEST_PICK && resultCode == RESULT_OK) {
            beginCrop(result.getData());
        } else if (requestCode == Crop.REQUEST_CROP) {
            handleCrop(resultCode, result);
        }
    }

    private void beginCrop(Uri source) {
        Uri destination = Uri.fromFile(new File(getCacheDir(), "cropped"));
        Crop.of(source, destination).asSquare().start(this);
    }

    private void handleCrop(int resultCode, Intent result) {
        if (resultCode == RESULT_OK) {
            resultView.setImageURI(Crop.getOutput(result));
        } else if (resultCode == Crop.RESULT_ERROR) {
            Toast.makeText(this, Crop.getError(result).getMessage(), Toast.LENGTH_SHORT).show();
        }
    }

}

Выход:

Другие вопросы по тегам