fix: resolve conflicting companion objects and method definitions in CameraActivity
This commit is contained in:
@@ -35,16 +35,19 @@ import java.util.concurrent.Executors
|
|||||||
|
|
||||||
class CameraActivity : AppCompatActivity() {
|
class CameraActivity : AppCompatActivity() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val TAG = "LogCam"
|
private const val TAG = "LogCam"
|
||||||
private const val REQUEST_CODE_PERMISSIONS = 10
|
private const val REQUEST_CODE_PERMISSIONS = 10
|
||||||
private val REQUIRED_PERMISSIONS = arrayOf(
|
private val REQUIRED_PERMISSIONS = arrayOf(
|
||||||
Manifest.permission.CAMERA
|
Manifest.permission.CAMERA
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// 拍照模式常量定义
|
||||||
|
private const val MODE_PHOTO = 0 // 普通拍照
|
||||||
|
private const val MODE_WATERMARK = 1 // 水印模式
|
||||||
|
private const val MODE_COMPOSE = 2 // 合成模式
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private lateinit var viewFinder: PreviewView
|
private lateinit var viewFinder: PreviewView
|
||||||
private lateinit var captureButton: ImageButton
|
private lateinit var captureButton: ImageButton
|
||||||
private lateinit var settingsButton: ImageButton
|
private lateinit var settingsButton: ImageButton
|
||||||
@@ -56,12 +59,6 @@ companion object {
|
|||||||
private var captureMode = MODE_PHOTO // 默认为普通拍照模式
|
private var captureMode = MODE_PHOTO // 默认为普通拍照模式
|
||||||
private var watermarkEnabled = true // 是否启用时间戳水印
|
private var watermarkEnabled = true // 是否启用时间戳水印
|
||||||
|
|
||||||
// 常量定义
|
|
||||||
companion object {
|
|
||||||
private const val MODE_PHOTO = 0 // 普通拍照
|
|
||||||
private const val MODE_WATERMARK = 1 // 水印模式
|
|
||||||
private const val MODE_COMPOSE = 2 // 合成模式
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private lateinit var cameraExecutor: ExecutorService
|
private lateinit var cameraExecutor: ExecutorService
|
||||||
@@ -101,6 +98,8 @@ companion object {
|
|||||||
// 设置点击监听器
|
// 设置点击监听器
|
||||||
captureButton.setOnClickListener { takePhoto() }
|
captureButton.setOnClickListener { takePhoto() }
|
||||||
settingsButton.setOnClickListener { openSettings() }
|
settingsButton.setOnClickListener { openSettings() }
|
||||||
|
}
|
||||||
|
|
||||||
private fun showModeSelectionDialog() {
|
private fun showModeSelectionDialog() {
|
||||||
val popupMenu = PopupMenu(this, modeButton)
|
val popupMenu = PopupMenu(this, modeButton)
|
||||||
popupMenu.menu.apply {
|
popupMenu.menu.apply {
|
||||||
@@ -210,44 +209,32 @@ companion object {
|
|||||||
val msg = "照片已保存: ${savedUri.lastPathSegment}"
|
val msg = "照片已保存: ${savedUri.lastPathSegment}"
|
||||||
Log.d(TAG, msg)
|
Log.d(TAG, msg)
|
||||||
|
|
||||||
// 验证文件是否真的存在
|
// 根据当前模式决定后续处理
|
||||||
try {
|
when (captureMode) {
|
||||||
val cursor = contentResolver.query(savedUri, null, null, null, null)
|
MODE_PHOTO -> {
|
||||||
if (cursor != null && cursor.moveToFirst()) {
|
// 普通模式:直接添加到预览
|
||||||
Log.d(TAG, "文件验证成功: ${savedUri}")
|
|
||||||
// 添加到列表并显示预览
|
|
||||||
capturedImageUris.add(savedUri)
|
|
||||||
showPhotoPreview(savedUri)
|
|
||||||
|
|
||||||
// 如果已经有4张照片,显示合成按钮
|
|
||||||
if (capturedImageUris.size >= 4) {
|
|
||||||
showComposeButton()
|
|
||||||
}
|
|
||||||
|
|
||||||
runOnUiThread {
|
runOnUiThread {
|
||||||
Toast.makeText(baseContext, "照片已保存", Toast.LENGTH_SHORT).show()
|
Toast.makeText(baseContext, "照片已保存", Toast.LENGTH_SHORT).show()
|
||||||
|
showPhotoPreview(savedUri)
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
Log.w(TAG, "文件验证失败,但onImageSaved被调用: ${savedUri}")
|
MODE_WATERMARK -> {
|
||||||
|
// 水印模式:添加水印后再显示
|
||||||
|
addWatermarkAndSave(savedUri)
|
||||||
|
}
|
||||||
|
MODE_COMPOSE -> {
|
||||||
|
// 合成模式:添加到合成列表
|
||||||
runOnUiThread {
|
runOnUiThread {
|
||||||
Toast.makeText(baseContext, "照片可能未保存", Toast.LENGTH_SHORT).show()
|
Toast.makeText(baseContext, "图片已添加到合成列表", Toast.LENGTH_SHORT).show()
|
||||||
|
showPhotoPreview(savedUri)
|
||||||
|
capturedImageUris.add(savedUri)
|
||||||
|
|
||||||
|
// 如果已经有4张照片,显示合成按钮
|
||||||
|
if (capturedImageUris.size >= 4) {
|
||||||
|
showComposeButton()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cursor?.close()
|
|
||||||
} catch (e: Exception) {
|
|
||||||
Log.e(TAG, "文件验证异常: ${e.message}")
|
|
||||||
// 即使验证失败,也尝试添加到列表
|
|
||||||
capturedImageUris.add(savedUri)
|
|
||||||
showPhotoPreview(savedUri)
|
|
||||||
|
|
||||||
// 如果已经有4张照片,显示合成按钮
|
|
||||||
if (capturedImageUris.size >= 4) {
|
|
||||||
showComposeButton()
|
|
||||||
}
|
|
||||||
|
|
||||||
runOnUiThread {
|
|
||||||
Toast.makeText(baseContext, "照片已保存", Toast.LENGTH_SHORT).show()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Log.w(TAG, "onImageSaved被调用但savedUri为null")
|
Log.w(TAG, "onImageSaved被调用但savedUri为null")
|
||||||
@@ -298,18 +285,6 @@ companion object {
|
|||||||
if (cursor != null && cursor.moveToFirst()) {
|
if (cursor != null && cursor.moveToFirst()) {
|
||||||
val displayName = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME))
|
val displayName = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME))
|
||||||
Log.d(TAG, "图片捕获失败但文件已存在: $displayName")
|
Log.d(TAG, "图片捕获失败但文件已存在: $displayName")
|
||||||
// 获取最新保存的文件URI
|
|
||||||
val latestUri = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media._ID))
|
|
||||||
val latestUriObj = Uri.parse("${MediaStore.Images.Media.EXTERNAL_CONTENT_URI}/$latestUri")
|
|
||||||
// 添加到列表并显示预览
|
|
||||||
capturedImageUris.add(latestUriObj)
|
|
||||||
showPhotoPreview(latestUriObj)
|
|
||||||
|
|
||||||
// 如果已经有4张照片,显示合成按钮
|
|
||||||
if (capturedImageUris.size >= 4) {
|
|
||||||
showComposeButton()
|
|
||||||
}
|
|
||||||
|
|
||||||
runOnUiThread {
|
runOnUiThread {
|
||||||
Toast.makeText(baseContext, "图片已保存: $displayName", Toast.LENGTH_LONG).show()
|
Toast.makeText(baseContext, "图片已保存: $displayName", Toast.LENGTH_LONG).show()
|
||||||
}
|
}
|
||||||
@@ -349,18 +324,6 @@ companion object {
|
|||||||
// 检查是否在最近几秒内保存了文件
|
// 检查是否在最近几秒内保存了文件
|
||||||
if (Math.abs(currentTime - dateAdded) <= 5) {
|
if (Math.abs(currentTime - dateAdded) <= 5) {
|
||||||
Log.d(TAG, "processing错误但图片已保存: $displayName")
|
Log.d(TAG, "processing错误但图片已保存: $displayName")
|
||||||
// 获取最新保存的文件URI
|
|
||||||
val latestUri = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media._ID))
|
|
||||||
val latestUriObj = Uri.parse("${MediaStore.Images.Media.EXTERNAL_CONTENT_URI}/$latestUri")
|
|
||||||
// 添加到列表并显示预览
|
|
||||||
capturedImageUris.add(latestUriObj)
|
|
||||||
showPhotoPreview(latestUriObj)
|
|
||||||
|
|
||||||
// 如果已经有4张照片,显示合成按钮
|
|
||||||
if (capturedImageUris.size >= 4) {
|
|
||||||
showComposeButton()
|
|
||||||
}
|
|
||||||
|
|
||||||
runOnUiThread {
|
runOnUiThread {
|
||||||
Toast.makeText(baseContext, "图片已保存: $displayName", Toast.LENGTH_LONG).show()
|
Toast.makeText(baseContext, "图片已保存: $displayName", Toast.LENGTH_LONG).show()
|
||||||
}
|
}
|
||||||
@@ -397,6 +360,8 @@ companion object {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
}
|
||||||
|
|
||||||
private fun addWatermarkAndSave(originalUri: Uri) {
|
private fun addWatermarkAndSave(originalUri: Uri) {
|
||||||
try {
|
try {
|
||||||
// 读取原始图片
|
// 读取原始图片
|
||||||
@@ -500,8 +465,6 @@ companion object {
|
|||||||
|
|
||||||
return mutableBitmap
|
return mutableBitmap
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun createOutputFileOptions(): ImageCapture.OutputFileOptions {
|
private fun createOutputFileOptions(): ImageCapture.OutputFileOptions {
|
||||||
val timestamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date())
|
val timestamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date())
|
||||||
@@ -622,30 +585,6 @@ companion object {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addWatermarkToBitmap(originalBitmap: Bitmap): Bitmap {
|
|
||||||
val timestamp = SimpleDateFormat("yyyy年-MM月-dd日 HH:mm:ss", Locale.getDefault()).format(Date())
|
|
||||||
|
|
||||||
val mutableBitmap = originalBitmap.copy(Bitmap.Config.ARGB_8888, true)
|
|
||||||
val canvas = Canvas(mutableBitmap)
|
|
||||||
|
|
||||||
val paint = Paint().apply {
|
|
||||||
color = Color.WHITE
|
|
||||||
textSize = 32f
|
|
||||||
typeface = Typeface.DEFAULT_BOLD
|
|
||||||
setShadowLayer(5f, 0f, 0f, Color.BLACK)
|
|
||||||
}
|
|
||||||
|
|
||||||
val textWidth = paint.measureText(timestamp)
|
|
||||||
val textHeight = paint.descent() - paint.ascent()
|
|
||||||
|
|
||||||
val x = 20f
|
|
||||||
val y = mutableBitmap.height - textHeight - 20f
|
|
||||||
|
|
||||||
canvas.drawText(timestamp, x, y, paint)
|
|
||||||
|
|
||||||
return mutableBitmap
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun openSettings() {
|
private fun openSettings() {
|
||||||
// 打开设置页面
|
// 打开设置页面
|
||||||
val settingsFragment = SettingsFragment()
|
val settingsFragment = SettingsFragment()
|
||||||
|
|||||||
Reference in New Issue
Block a user