From 77619a5300e98be5d76eaa7ae6271d305700d36b Mon Sep 17 00:00:00 2001 From: dongliang Date: Thu, 7 May 2026 12:14:01 +0930 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=9B=BE=E7=89=87=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E6=A8=AA=E5=90=91=E6=BB=9A=E5=8A=A8=E6=98=BE=E7=A4=BA=E6=89=80?= =?UTF-8?q?=E6=9C=89+=E7=82=B9=E5=87=BB=E6=94=BE=E5=A4=A7=E5=85=A8?= =?UTF-8?q?=E5=B1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 去掉3张限制,HorizontalScrollView 横向滚动展示所有图片 - 缩略图 80dp 正方形,超出可滑动查看 - 点击缩略图全屏放大查看(FIT_CENTER),点击关闭 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../xiaoqu/watch/ui/task/TaskListFragment.kt | 50 ++++++++++++++----- .../main/res/layout/fragment_task_list.xml | 18 +++++-- 2 files changed, 51 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/xiaoqu/watch/ui/task/TaskListFragment.kt b/app/src/main/java/com/xiaoqu/watch/ui/task/TaskListFragment.kt index 8cfe449..a377aac 100644 --- a/app/src/main/java/com/xiaoqu/watch/ui/task/TaskListFragment.kt +++ b/app/src/main/java/com/xiaoqu/watch/ui/task/TaskListFragment.kt @@ -260,7 +260,7 @@ class TaskListFragment : BaseFragment() { binding.tvPosition.visibility = View.GONE binding.tvTimeInfo.visibility = View.GONE binding.tvPoints.visibility = View.GONE - binding.picContainer.visibility = View.GONE + binding.picScrollView.visibility = View.GONE binding.picContainer.removeAllViews() binding.tvNote.visibility = View.GONE binding.btnVoice.visibility = View.GONE @@ -413,38 +413,64 @@ class TaskListFragment : BaseFragment() { * 显示图片缩略图(用户上报任务 taskType=3/4 可能有图片附件) * 横排展示,最多3张,点击查看大图 */ + /** + * 显示图片缩略图(用户上报任务可能有图片附件) + * 横向滚动展示所有图片,点击放大全屏查看 + */ private fun showPictures(detail: TaskDetail) { if (!detail.hasPictures) return val pics = detail.uploadPic!!.filter { it.url.isNotEmpty() } if (pics.isEmpty()) return - binding.picContainer.visibility = View.VISIBLE + binding.picScrollView.visibility = View.VISIBLE binding.picContainer.removeAllViews() - // 计算每张图片尺寸:容器宽度 / 最多3列,留 gap - val maxCount = minOf(pics.size, 3) - val gap = 8 // dp - val containerWidth = resources.displayMetrics.widthPixels - - (21 * 2 * resources.displayMetrics.density).toInt() // 减去 safe area padding - val imgSize = (containerWidth - gap * (maxCount - 1) * - resources.displayMetrics.density.toInt()) / maxCount + val density = resources.displayMetrics.density + val imgSize = (80 * density).toInt() // 每张 80dp 正方形 + val gap = (8 * density).toInt() - for ((index, pic) in pics.take(3).withIndex()) { + for ((index, pic) in pics.withIndex()) { val imageView = android.widget.ImageView(requireContext()).apply { layoutParams = android.widget.LinearLayout.LayoutParams(imgSize, imgSize).apply { - if (index > 0) marginStart = (gap * resources.displayMetrics.density).toInt() + if (index > 0) marginStart = gap } scaleType = android.widget.ImageView.ScaleType.CENTER_CROP setBackgroundColor(requireContext().getColor(R.color.card_background)) } - // 用 HTTP 加载图片(和语音一样的 TLS 问题) val httpUrl = pic.url.replace("https://", "http://") loadImage(imageView, httpUrl) + // 点击放大全屏查看 + imageView.setOnClickListener { showFullImage(httpUrl) } binding.picContainer.addView(imageView) } } + /** 全屏显示大图(覆盖在当前页面上,点击关闭) */ + private fun showFullImage(url: String) { + val container = requireActivity().findViewById(R.id.dialog_container) + val overlay = FrameLayout(requireContext()).apply { + setBackgroundColor(0xE0000000.toInt()) // 半透明黑 + isClickable = true + } + val imageView = android.widget.ImageView(requireContext()).apply { + layoutParams = FrameLayout.LayoutParams( + FrameLayout.LayoutParams.MATCH_PARENT, + FrameLayout.LayoutParams.MATCH_PARENT + ) + scaleType = android.widget.ImageView.ScaleType.FIT_CENTER + setPadding(0, 0, 0, 0) + } + overlay.addView(imageView) + // 点击关闭 + overlay.setOnClickListener { + container.removeView(overlay) + } + container.addView(overlay) + // 加载大图 + loadImage(imageView, url) + } + /** 异步加载图片到 ImageView */ private fun loadImage(imageView: android.widget.ImageView, url: String) { viewLifecycleOwner.lifecycleScope.launch { diff --git a/app/src/main/res/layout/fragment_task_list.xml b/app/src/main/res/layout/fragment_task_list.xml index 1446ac1..659ea9e 100644 --- a/app/src/main/res/layout/fragment_task_list.xml +++ b/app/src/main/res/layout/fragment_task_list.xml @@ -179,14 +179,22 @@ - - + + android:visibility="gone"> + + + +