Обновленный модуль по работе с фотографиями (take picture pick from gallery) - sashatinkoff/A18 GitHub Wiki
-
Добавить в проект pics.x.x.x.aar
-
В модуле pics убрал жесткую привязку к MVVM и другим модулям A18. Ниже показан пример как добавить обработку рисунков в ваши Activity и ViewModel
private val pictureHandler = PictureHandler(application) val pictureResults = MutableLiveData<PictureHandler.PictureResults>() fun camera(activity: Activity) = pictureHandler.takePicture(activity) fun gallery(activity: Activity) = pictureHandler.pickGallery(activity) fun onResult(requestCode: Int, data: Intent?) = io { pictureResults.postValue(pictureHandler.result(requestCode, data)) }
Код в блоке io выполняется в контексте корутин Dispatchers.IO. Вы можете использовать любой способ работы с потоками, начиная от AsyncTask, заканчивая Rx, корутинами или вообще выполнять задачу в Main потоке (что не очень рекомендуется)
MainActivity выглядит следующим образом
private fun pictures() {
btnCamer.setOnClickListener { viewmodel.camera(this) }
btnGallery.setOnClickListener { viewmodel.gallery(this) }
}
viewmodel.pictureResults.observe(this, Observer { results ->
results.list.firstOrNull()?.apply {
imageview.setImageBitmap(BitmapFactory.decodeFile(localPath))
}
})
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
viewmodel.onResult(requestCode, data)
super.onActivityResult(requestCode, resultCode, data)
}
При желании, для получения рисунков из галереи вы можете поменять объект Intent, применив в нему декоратор как указано ниже
fun gallery(activity: Activity) = pictureHandler.pickGallery(activity, decorIntent = { intent -> intent.... })