Android-приложение для создания собственного фотоальбома, полностью имитирующего интерфейс WeChat. Поддерживает функции съёмки, выбора (одиночного и множественного), обрезки, поворота и т. д.
Если вы обнаружите ошибку или у вас есть хорошие предложения, вы можете создать запрос на слияние. После моего тестирования я немедленно объединю его и опубликую новую версию, чтобы гарантировать, что библиотека находится в рабочем состоянии.
Этот проект основан на:
Вы можете использовать исходный код. Также приглашаем всех скачать и попробовать этот проект. Если у вас возникнут какие-либо проблемы во время использования, пожалуйста, дайте нам знать.
Перед использованием, если вы пользователь Android Studio, добавьте следующую строку кода:
compile 'com.lzy.widget:imagepicker:0.6.1' //указать версию
Параметр конфигурации | Значение параметра |
---|---|
multiMode | Режим выбора изображения, одиночный/множественный |
selectLimit | Ограничение количества множественных выборов, по умолчанию 9 |
showCamera | Показывать ли кнопку съёмки при выборе изображения |
crop | Разрешить ли обрезку (только для одиночного выбора) |
style | Форма рамки обрезки при обрезке (прямоугольник или круг) |
focusWidth | Ширина рамки обрезки (для круга автоматически выбирается минимальное значение ширины и высоты) |
focusHeight | Высота рамки обрезки (для круга автоматически выбирается минимальное значение ширины и высоты) |
outPutX | Требуемая ширина сохранённого изображения после обрезки |
outPutY | Требуемая высота сохранённого изображения после обрезки |
isSaveRectangle | Сохранить форму обрезанного изображения как прямоугольник или форму рамки обрезки. Например, при обрезке круглой формы установите значение true, тогда сохранённое изображение будет иметь прямоугольную форму. Если установить значение false, сохранённое изображение будет круглой формы |
imageLoader | Необходимый загрузчик изображений, который должен реализовать интерфейс ImageLoader |
Для получения дополнительной информации о коде, пожалуйста, скачайте демоверсию и ознакомьтесь с исходным кодом.
com.lzy.imagepicker.loader.ImageLoader
и реализовать его методы. Например, следующий код использует стороннюю библиотеку загрузки изображений Picasso
:public class PicassoImageLoader implements ImageLoader {
@Override
public void displayImage(Activity activity, String path, ImageView imageView, int width, int height) {
Picasso.with(activity)//
.load(Uri.fromFile(new File(path)))//
.placeholder(R.mipmap.default_image)//
.error(R.mipmap.default_image)//
.resize(width, height)//
.centerInside()//
.memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)//
.into(imageView);
}
@Override
public void clearMemoryCache() {
//здесь метод очистки кеша, реализуйте его в соответствии с вашими потребностями
}
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image_picker);
ImagePicker imagePicker = ImagePicker.getInstance();
imagePicker.setImageLoader(new PicassoImageLoader()); //настроить загрузчик изображений
imagePicker.setShowCamera(true); //показать кнопку съёмки
imagePicker.setCrop(true); //разрешить обрезку (только для одиночного выбора)
imagePicker.setSaveRectangle(true); //сохранить обрезанное изображение в виде прямоугольника
imagePicker.setSelectLimit(9); //ограничить количество множественных выборов
imagePicker.setStyle(CropImageView.Style.RECTANGLE); //форма рамки обрезки
imagePicker.setFocusWidth(800); //ширина рамки обрезки. Единица измерения — пиксели (для круга автоматически выбирается наименьшее значение ширины и высоты)
imagePicker.setFocusHeight(800); //высота рамки обрезки. Единица измерения — пиксели (для круга автоматически выбирается наименьшее значение ширины и высоты)
imagePicker.setOutPutX(1000);//требуемая ширина сохранённого изображения. Единица измерения — пиксели
imagePicker.setOutPutY(1000);//требуемая высота сохранённого изображения. Единица измерения — пиксели
}
public void onClick(View v) {
Intent intent = new Intent(this, ImageGridActivity.class);
startActivityForResult(intent, IMAGE_PICKER);
}
}
Intent intent = new Intent(this, ImageGridActivity.class);
intent.putExtra(ImageGridActivity.EXTRAS_TAKE_PICKERS,true); // 是否 является прямой камерой
startActivityForResult(intent, REQUEST_CODE_SELECT);
onActivityResult
, чтобы получить результат:@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == ImagePicker.RESULT_CODE_ITEMS) {
if (data != null && requestCode == IMAGE_PICKER) {
ArrayList<ImageItem> images =
``` ## Обновление журнала
V 0.6.1
* [Объединение] [Оптимизация интерфейса страницы выбора изображения, адаптация к переключению между горизонтальным и вертикальным экранами на странице предварительного просмотра #195](https://github.com/jeasonlzy/ImagePicker/pull/195)
V 0.6.0
* [Объединение] [Настройка интерфейса, действительно полная имитация WeChat](https://github.com/jeasonlzy/ImagePicker/pull/193)
* [Объединение] [fix(location): решение проблемы сбоя из-за недопустимого изображения](https://github.com/jeasonlzy/ImagePicker/pull/188)
V 0.5.5
* [Исправление] проблема, когда страница выбора изображения переходит в предварительный просмотр, отменяет выбор или возвращается в список после выбора, но не обновляется;
* [исправление] сбой, который может произойти при динамическом разрешении 6.0;
V 0.5.4
* [исправление] некоторые проблемы с утечкой памяти;
* [исправление] новый метод отображения выбранных изображений: подробности см. на демонстрационной странице ImagePickerActivity; если эта функция не требуется, возможно, вам нужна WxDemoActivity.
V 0.5.3
* [исправление] oom, вызванное поворотом изображения;
* [исправление] проблемы с повторением TitleBar и строки состояния на некоторых телефонах;
V 0.5.1
* [коррекция] поскольку функция исходного изображения фактически ещё не реализована, в этой версии скрыто отображение исходного изображения. Чтобы пользователи не были введены в заблуждение проблемой исходного изображения.
* [исправление] использование RecyclerView для замены GridView решает проблему глобального обновления при изменении выбранного состояния;
* [подсказка] хотя эта версия решает проблему глобального обновления, если вы используете Picasso, всё равно может возникнуть проблема с повторной загрузкой одного изображения, это проблема самого Picasso, рекомендуется использовать фреймворк Glide.
V 0.5.0
* [исправление] решение проблемы конфликта провайдера;
V 0.4.8
* [исправление] решена проблема, из-за которой в демоверсии прямой вызов камеры и обрезка не возвращают данные, обновление не требуется, если эта функция не нужна;
V 0.4.7
* [новое] добавлена функция прямого вызова камеры;
* [исправление] решено возможное столкновение с провайдером основного проекта;
* [исправление] исправлена проблема сбоя при нажатии на изображение предварительного просмотра;
* [исправление] исправлена проблема сбоя, вызванная ограничением передачи значений через Intent;
* [исправление] решены проблемы с поворотом изображения после съёмки на некоторых моделях;
* [исправление] изменено фоновое изображение окна выбора на серый, чтобы избежать проблем с чтением белого изображения.
V 0.3.5
* [новое] предоставляет способ прямого вызова камеры, а также возможность напрямую установить, будет ли обрезано изображение;
* [исправление] проблема сбоя на устройствах Android7.0 при прямом вызове системной камеры;
* [внимание] если возникает java.lang.RuntimeException: Unable to get provider android.support.v4.content.FileProvider: java.lang.SecurityException: Provider must not be exported, пожалуйста, выполните clean и запустите снова.
## Лицензии
Copyright 2016 jeasonlzy(廖子尧)
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )