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() {
|
||||
|
||||
companion object {
|
||||
companion object {
|
||||
private const val TAG = "LogCam"
|
||||
private const val REQUEST_CODE_PERMISSIONS = 10
|
||||
private val REQUIRED_PERMISSIONS = arrayOf(
|
||||
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 captureButton: ImageButton
|
||||
private lateinit var settingsButton: ImageButton
|
||||
@@ -56,12 +59,6 @@ companion object {
|
||||
private var captureMode = MODE_PHOTO // 默认为普通拍照模式
|
||||
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
|
||||
@@ -101,6 +98,8 @@ companion object {
|
||||
// 设置点击监听器
|
||||
captureButton.setOnClickListener { takePhoto() }
|
||||
settingsButton.setOnClickListener { openSettings() }
|
||||
}
|
||||
|
||||
private fun showModeSelectionDialog() {
|
||||
val popupMenu = PopupMenu(this, modeButton)
|
||||
popupMenu.menu.apply {
|
||||
@@ -210,44 +209,32 @@ companion object {
|
||||
val msg = "照片已保存: ${savedUri.lastPathSegment}"
|
||||
Log.d(TAG, msg)
|
||||
|
||||
// 验证文件是否真的存在
|
||||
try {
|
||||
val cursor = contentResolver.query(savedUri, null, null, null, null)
|
||||
if (cursor != null && cursor.moveToFirst()) {
|
||||
Log.d(TAG, "文件验证成功: ${savedUri}")
|
||||
// 添加到列表并显示预览
|
||||
capturedImageUris.add(savedUri)
|
||||
showPhotoPreview(savedUri)
|
||||
|
||||
// 如果已经有4张照片,显示合成按钮
|
||||
if (capturedImageUris.size >= 4) {
|
||||
showComposeButton()
|
||||
}
|
||||
|
||||
// 根据当前模式决定后续处理
|
||||
when (captureMode) {
|
||||
MODE_PHOTO -> {
|
||||
// 普通模式:直接添加到预览
|
||||
runOnUiThread {
|
||||
Toast.makeText(baseContext, "照片已保存", Toast.LENGTH_SHORT).show()
|
||||
showPhotoPreview(savedUri)
|
||||
}
|
||||
} else {
|
||||
Log.w(TAG, "文件验证失败,但onImageSaved被调用: ${savedUri}")
|
||||
}
|
||||
MODE_WATERMARK -> {
|
||||
// 水印模式:添加水印后再显示
|
||||
addWatermarkAndSave(savedUri)
|
||||
}
|
||||
MODE_COMPOSE -> {
|
||||
// 合成模式:添加到合成列表
|
||||
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 {
|
||||
Log.w(TAG, "onImageSaved被调用但savedUri为null")
|
||||
@@ -298,18 +285,6 @@ companion object {
|
||||
if (cursor != null && cursor.moveToFirst()) {
|
||||
val displayName = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME))
|
||||
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 {
|
||||
Toast.makeText(baseContext, "图片已保存: $displayName", Toast.LENGTH_LONG).show()
|
||||
}
|
||||
@@ -349,18 +324,6 @@ companion object {
|
||||
// 检查是否在最近几秒内保存了文件
|
||||
if (Math.abs(currentTime - dateAdded) <= 5) {
|
||||
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 {
|
||||
Toast.makeText(baseContext, "图片已保存: $displayName", Toast.LENGTH_LONG).show()
|
||||
}
|
||||
@@ -397,6 +360,8 @@ companion object {
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
private fun addWatermarkAndSave(originalUri: Uri) {
|
||||
try {
|
||||
// 读取原始图片
|
||||
@@ -501,8 +466,6 @@ companion object {
|
||||
return mutableBitmap
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private fun createOutputFileOptions(): ImageCapture.OutputFileOptions {
|
||||
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() {
|
||||
// 打开设置页面
|
||||
val settingsFragment = SettingsFragment()
|
||||
|
||||
Reference in New Issue
Block a user