feat: 增加拍摄界面
This commit is contained in:
@@ -1,18 +1,24 @@
|
||||
package com.navinfo.volvo
|
||||
|
||||
import android.Manifest
|
||||
import android.content.DialogInterface
|
||||
import android.os.Bundle
|
||||
import android.widget.Toast
|
||||
import com.google.android.material.bottomnavigation.BottomNavigationView
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.navigation.findNavController
|
||||
import androidx.navigation.ui.AppBarConfiguration
|
||||
import androidx.navigation.ui.setupWithNavController
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.navinfo.volvo.R
|
||||
import com.navinfo.volvo.databinding.ActivityMainBinding
|
||||
import permissions.dispatcher.*
|
||||
|
||||
class MainActivity : AppCompatActivity() {
|
||||
|
||||
private lateinit var binding: ActivityMainBinding
|
||||
|
||||
@NeedsPermission(Manifest.permission.CAMERA)
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
@@ -32,4 +38,29 @@ class MainActivity : AppCompatActivity() {
|
||||
// setupActionBarWithNavController(navController, appBarConfiguration)
|
||||
navView.setupWithNavController(navController)
|
||||
}
|
||||
|
||||
@OnShowRationale(Manifest.permission.CAMERA)
|
||||
fun showRationaleForCamera(request: PermissionRequest) {
|
||||
// showRationaleDialog(R.string.permission_camera_rationale, request)
|
||||
// Toast.makeText(context, "当前操作需要您授权相机权限!", Toast.LENGTH_SHORT).show()
|
||||
MaterialAlertDialogBuilder(this)
|
||||
.setTitle("提示")
|
||||
.setMessage("当前操作需要您授权读写SD卡权限!")
|
||||
.setPositiveButton("确定", DialogInterface.OnClickListener { dialogInterface, i ->
|
||||
dialogInterface.dismiss()
|
||||
// 在SD卡创建项目目录
|
||||
|
||||
})
|
||||
.show()
|
||||
}
|
||||
|
||||
@OnPermissionDenied(Manifest.permission.CAMERA)
|
||||
fun onCameraDenied() {
|
||||
Toast.makeText(this, "当前操作需要您授权读写SD卡权限!", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
|
||||
@OnNeverAskAgain(Manifest.permission.CAMERA)
|
||||
fun onCameraNeverAskAgain() {
|
||||
Toast.makeText(this, "您已永久拒绝授权读写SD卡权限!", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
package com.navinfo.volvo.ui.camera
|
||||
|
||||
import android.os.Bundle
|
||||
import android.text.TextUtils
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import com.navinfo.volvo.databinding.FragmentCameraBinding
|
||||
import com.otaliastudios.cameraview.CameraListener
|
||||
import com.otaliastudios.cameraview.CameraView
|
||||
import com.otaliastudios.cameraview.PictureResult
|
||||
import top.zibin.luban.Luban
|
||||
import top.zibin.luban.OnCompressListener
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
|
||||
|
||||
class CameraFragment : Fragment() {
|
||||
|
||||
private var _binding: FragmentCameraBinding? = null
|
||||
|
||||
// This property is only valid between onCreateView and
|
||||
// onDestroyView.
|
||||
private val binding get() = _binding!!
|
||||
|
||||
private val cameraLifeCycleObserver: CameraLifeCycleObserver by lazy {
|
||||
CameraLifeCycleObserver()
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View {
|
||||
lifecycle.addObserver(cameraLifeCycleObserver)
|
||||
|
||||
val cameraViewModel =
|
||||
ViewModelProvider(this).get(CameraViewModel::class.java)
|
||||
|
||||
_binding = FragmentCameraBinding.inflate(inflater, container, false)
|
||||
val root: View = binding.root
|
||||
|
||||
val cameraView: CameraView = binding.camera
|
||||
cameraView.setLifecycleOwner(this)
|
||||
cameraView.addCameraListener(object:CameraListener() { // 添加拍照回调
|
||||
override fun onPictureTaken(result: PictureResult) {
|
||||
super.onPictureTaken(result)
|
||||
result.toFile()
|
||||
// 压缩图片文件
|
||||
Luban.with(context)
|
||||
.load<Any>(photos)
|
||||
.ignoreBy(100)
|
||||
.setTargetDir(getPath())
|
||||
.filter { path ->
|
||||
!(TextUtils.isEmpty(path) || path.lowercase(Locale.getDefault())
|
||||
.endsWith(".gif"))
|
||||
}
|
||||
.setCompressListener(object : OnCompressListener {
|
||||
override fun onStart() {
|
||||
// TODO 压缩开始前调用,可以在方法内启动 loading UI
|
||||
}
|
||||
|
||||
override fun onSuccess(file: File?) {
|
||||
// TODO 压缩成功后调用,返回压缩后的图片文件
|
||||
}
|
||||
|
||||
override fun onError(e: Throwable) {
|
||||
// TODO 当压缩过程出现问题时调用
|
||||
}
|
||||
}).launch()
|
||||
}
|
||||
})
|
||||
// 点击拍照
|
||||
binding.imgStartCamera.setOnClickListener {
|
||||
cameraView.takePicture()
|
||||
}
|
||||
return root
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
super.onDestroyView()
|
||||
_binding = null
|
||||
lifecycle.removeObserver(cameraLifeCycleObserver)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.navinfo.volvo.ui.camera
|
||||
|
||||
import androidx.lifecycle.DefaultLifecycleObserver
|
||||
import androidx.lifecycle.LifecycleOwner
|
||||
|
||||
class CameraLifeCycleObserver: DefaultLifecycleObserver {
|
||||
|
||||
override fun onCreate(owner: LifecycleOwner) {
|
||||
super.onCreate(owner)
|
||||
}
|
||||
|
||||
override fun onStart(owner: LifecycleOwner) {
|
||||
super.onStart(owner)
|
||||
}
|
||||
|
||||
override fun onResume(owner: LifecycleOwner) {
|
||||
super.onResume(owner)
|
||||
}
|
||||
|
||||
override fun onPause(owner: LifecycleOwner) {
|
||||
super.onPause(owner)
|
||||
}
|
||||
|
||||
override fun onStop(owner: LifecycleOwner) {
|
||||
super.onStop(owner)
|
||||
}
|
||||
|
||||
override fun onDestroy(owner: LifecycleOwner) {
|
||||
super.onDestroy(owner)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.navinfo.volvo.ui.camera
|
||||
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
|
||||
class CameraViewModel : ViewModel() {
|
||||
|
||||
private val _text = MutableLiveData<String>().apply {
|
||||
value = "This is dashboard Fragment"
|
||||
}
|
||||
val text: LiveData<String> = _text
|
||||
}
|
||||
@@ -1,15 +1,21 @@
|
||||
package com.navinfo.volvo.ui.message
|
||||
|
||||
import android.Manifest
|
||||
import android.content.DialogInterface
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.Toast
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.Observer
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.gredicer.datetimepicker.DateTimePickerFragment
|
||||
import com.navinfo.volvo.databinding.FragmentObtainMessageBinding
|
||||
import com.navinfo.volvo.ui.markRequiredInRed
|
||||
import permissions.dispatcher.*
|
||||
import java.util.*
|
||||
|
||||
class ObtainMessageFragment: Fragment() {
|
||||
private var _binding: FragmentObtainMessageBinding? = null
|
||||
@@ -59,10 +65,43 @@ class ObtainMessageFragment: Fragment() {
|
||||
}
|
||||
|
||||
// 点击按钮选择拍照
|
||||
binding.btnStartCamera.setOnClickListener {
|
||||
// 启动相机
|
||||
startCamera()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
super.onDestroyView()
|
||||
_binding = null
|
||||
}
|
||||
|
||||
@NeedsPermission(Manifest.permission.CAMERA)
|
||||
fun startCamera() {
|
||||
|
||||
}
|
||||
|
||||
@OnShowRationale(Manifest.permission.CAMERA)
|
||||
fun showRationaleForCamera(request: PermissionRequest) {
|
||||
// showRationaleDialog(R.string.permission_camera_rationale, request)
|
||||
// Toast.makeText(context, "当前操作需要您授权相机权限!", Toast.LENGTH_SHORT).show()
|
||||
MaterialAlertDialogBuilder(context!!)
|
||||
.setTitle("提示")
|
||||
.setMessage("当前操作需要您授权相机权限!")
|
||||
.setPositiveButton("确定", DialogInterface.OnClickListener { dialogInterface, i ->
|
||||
startCamera()
|
||||
dialogInterface.dismiss()
|
||||
})
|
||||
.show()
|
||||
}
|
||||
|
||||
@OnPermissionDenied(Manifest.permission.CAMERA)
|
||||
fun onCameraDenied() {
|
||||
Toast.makeText(context, "当前操作需要您授权相机权限!", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
|
||||
@OnNeverAskAgain(Manifest.permission.CAMERA)
|
||||
fun onCameraNeverAskAgain() {
|
||||
Toast.makeText(context, "您已永久拒绝授权相机权限!", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user