diff --git a/app/src/main/java/com/gh/common/util/ConcernContentUtils.java b/app/src/main/java/com/gh/common/util/ConcernContentUtils.java index 4f59b2f503..23e9d0a501 100644 --- a/app/src/main/java/com/gh/common/util/ConcernContentUtils.java +++ b/app/src/main/java/com/gh/common/util/ConcernContentUtils.java @@ -103,7 +103,7 @@ public class ConcernContentUtils { break; } imageView.setOnClickListener(v -> { - Intent checkIntent = ImageViewerActivity.getIntent(context, (ArrayList) list, position, imageViewList, entrance, true); + Intent checkIntent = ImageViewerActivity.getIntent(context, (ArrayList) list, position, imageViewList, entrance); context.startActivity(checkIntent); }); return imageView; diff --git a/app/src/main/java/com/gh/common/view/ImageContainerView.kt b/app/src/main/java/com/gh/common/view/ImageContainerView.kt index b2607f9d77..26da2a35a7 100644 --- a/app/src/main/java/com/gh/common/view/ImageContainerView.kt +++ b/app/src/main/java/com/gh/common/view/ImageContainerView.kt @@ -71,13 +71,13 @@ class ImageContainerView : LinearLayout { fun bindData(entity: AnswerEntity, entrance: String = "", path: String = "") { imageViewList.clear() + if (entity.id != mAnswerEntity?.id) { + removeAllViews() + } mAnswerEntity = entity mEntrance = entrance mPath = path index = 0 - if (entity != mAnswerEntity) { - removeAllViews() - } if ((entity.user.id == UserManager.getInstance().userId && entity.videos.isNotEmpty()) || (entity.user.id != UserManager.getInstance().userId && entity.getPassVideos().isNotEmpty()) || entity.images.isNullOrEmpty() @@ -195,7 +195,7 @@ class ImageContainerView : LinearLayout { } val intent = ImageViewerActivity.getIntent( context, mAnswerEntity!!.images as ArrayList, position, imageViewList, - if (mAnswerEntity?.type == "community_article") mAnswerEntity else null, mEntrance + if (mAnswerEntity?.type == "community_article") mAnswerEntity else null, mEntrance, true ) context.startActivity(intent) } diff --git a/app/src/main/java/com/gh/gamecenter/ImageViewerActivity.kt b/app/src/main/java/com/gh/gamecenter/ImageViewerActivity.kt index 9104644448..ee78b6e303 100644 --- a/app/src/main/java/com/gh/gamecenter/ImageViewerActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/ImageViewerActivity.kt @@ -71,6 +71,7 @@ import kotlin.math.roundToInt */ class ImageViewerActivity : BaseActivity(), OnPageChangeListener { + private var mScale = 0F private var mAnimating = false private var mRatio = 1F lateinit var mViewPager: ViewPager @@ -97,7 +98,7 @@ class ImageViewerActivity : BaseActivity(), OnPageChangeListener { private var mUseEnterAndExitAnimation = false private var mShowSaveBtn = false private var mAnswerEntity: AnswerEntity? = null - private var mIsConcernContent = false + private var mIsFromImageContainerView = false private var mLimitWidth = 0 private var mOriginLeftList: ArrayList? = null @@ -156,7 +157,7 @@ class ImageViewerActivity : BaseActivity(), OnPageChangeListener { mOriginTopList = it.getIntegerArrayList(KEY_TOP) mOriginHeightList = it.getIntegerArrayList(KEY_HEIGHT) mOriginWidthList = it.getIntegerArrayList(KEY_WIDTH) - mIsConcernContent = it.getBoolean(KEY_IS_CONCERN_CONTENT) + mIsFromImageContainerView = it.getBoolean(KEY_IS_FROM_IMAGE_CONTAINER_VIEW) } if (mUrlList == null || mUrlList?.isEmpty() == true) { @@ -299,13 +300,14 @@ class ImageViewerActivity : BaseActivity(), OnPageChangeListener { private fun resizeImage(position: Int) { mBigImageView?.ssiv?.run { mRatio = sWidth / sHeight.toFloat() - if (!shouldResize()) return + if (!shouldResize(scale)) return if (mRatio > 1F) { mOriginWidth = (mOriginHeight * mRatio).roundToInt() mOriginLeft -= (mOriginWidth - (mOriginWidthList?.safelyGetInRelease(position) ?: 0)) / 2 } else if (mRatio < 1F) { mOriginHeight = (mOriginWidth / mRatio).roundToInt() - if (adapter?.count != 1 || mIsConcernContent) mOriginTop -= (mOriginHeight - (mOriginHeightList?.safelyGetInRelease(position) ?: 0)) / 2 + if (justChangeBoundsAndTransform()) return + mOriginTop -= (mOriginHeight - (mOriginHeightList?.safelyGetInRelease(position) ?: 0)) / 2 } } } @@ -469,15 +471,18 @@ class ImageViewerActivity : BaseActivity(), OnPageChangeListener { } } - private fun shouldResize() = mRatio != 1F && (mBigImageView?.ssiv?.scale != 1F || adapter?.count == 1) + private fun shouldResize(scale: Float) = !(mRatio == 1F || (scale in 0.95F..1.05F && !justChangeBoundsAndTransform())) + + private fun justChangeBoundsAndTransform() = mRatio < 1F && mIsFromImageContainerView && adapter?.count == 1 private fun startEndTransition() { if (mAnimating) return + mScale = mBigImageView?.ssiv?.scale ?: 0F val doResizeTransition = Runnable { TransitionManager.beginDelayedTransition(mContainer as ViewGroup, TransitionSet().apply { addTransition(ChangeBounds()) addTransition(ChangeTransform()) - if (!(mRatio < 1F && adapter?.count == 1)) addTransition(ResizeTransition()) + if (!justChangeBoundsAndTransform()) addTransition(ResizeTransition()) duration = RESIZE_DURATION interpolator = DecelerateInterpolator() addListener(object : TransitionListenerAdapter() { @@ -526,7 +531,7 @@ class ImageViewerActivity : BaseActivity(), OnPageChangeListener { override fun onTransitionEnd(transition: Transition) { if (!mAnimating) return mAnimating = false - if (shouldResize()) { + if (shouldResize(mScale)) { mContainer?.post(doResizeTransition) } else { this@ImageViewerActivity.finish() @@ -561,7 +566,7 @@ class ImageViewerActivity : BaseActivity(), OnPageChangeListener { lifecycle.removeObserver(this) mAnimating = false mContainer?.removeCallbacks(doTransition) - if (shouldResize()) mContainer?.removeCallbacks(doResizeTransition) + if (shouldResize(mScale)) mContainer?.removeCallbacks(doResizeTransition) TransitionManager.endTransitions(mContainer as ViewGroup) } } @@ -721,7 +726,7 @@ class ImageViewerActivity : BaseActivity(), OnPageChangeListener { return ObjectAnimator.ofFloat(startHeight.toFloat(), endHeight.toFloat()).apply { addUpdateListener { sceneRoot.findViewById(R.id.viewimage_iv_show)?.ssiv?.run { - if (mRatio < 1F && scale == 1F && adapter?.count != 1) { + if (mRatio < 1F && mScale in 0.95F..1.05F && adapter?.count != 1) { maxScale = scale setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_CROP) } @@ -882,7 +887,7 @@ class ImageViewerActivity : BaseActivity(), OnPageChangeListener { private const val KEY_CURRENT = "current" private const val KEY_SHOW_SAVE = "showSave" private const val KEY_USE_ENTER_AND_EXIT_ANIMATION = "use_enter_and_exit_animation" - private const val KEY_IS_CONCERN_CONTENT = "concern_content" + private const val KEY_IS_FROM_IMAGE_CONTAINER_VIEW = "is_from_image_container_view" private const val KEY_LEFT = "left" private const val KEY_TOP = "top" @@ -905,27 +910,27 @@ class ImageViewerActivity : BaseActivity(), OnPageChangeListener { } @JvmStatic - fun getIntent(context: Context, list: ArrayList, position: Int = 0, originalViewList: List? = null, entrance: String?, isConcernContent: Boolean = false): Intent { - return getIntent(context, list, position, originalViewList, entrance, false, null, isConcernContent) + fun getIntent(context: Context, list: ArrayList, position: Int = 0, originalViewList: List? = null, entrance: String?): Intent { + return getIntent(context, list, position, originalViewList, entrance, false, null) } @JvmStatic - fun getIntent(context: Context, list: ArrayList, position: Int = 0, originalViewList: List? = null, answerEntity: AnswerEntity? = null, entrance: String?): Intent { - return getIntent(context, list, position, originalViewList, entrance, false, answerEntity) + fun getIntent(context: Context, list: ArrayList, position: Int = 0, originalViewList: List? = null, answerEntity: AnswerEntity? = null, entrance: String?, isFromICV: Boolean = false): Intent { + return getIntent(context, list, position, originalViewList, entrance, false, answerEntity, isFromICV) } /** * 传入 viewList 代表使用渐入渐出动画 */ @JvmStatic - fun getIntent(context: Context, list: ArrayList, position: Int = 0, originalViewList: List? = null, entrance: String?, isShowSaveBtn: Boolean, answerEntity: AnswerEntity? = null, isConcernContent: Boolean = false): Intent { + fun getIntent(context: Context, list: ArrayList, position: Int = 0, originalViewList: List? = null, entrance: String?, isShowSaveBtn: Boolean, answerEntity: AnswerEntity? = null, isFromICV: Boolean = false): Intent { val intent = Intent(context, ImageViewerActivity::class.java) intent.putExtra(KEY_URL_LIST, list) intent.putExtra(KEY_CURRENT, position) intent.putExtra(KEY_SHOW_SAVE, isShowSaveBtn) intent.putExtra(AnswerEntity::class.java.name, answerEntity) intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance) - intent.putExtra(KEY_IS_CONCERN_CONTENT, isConcernContent) + intent.putExtra(KEY_IS_FROM_IMAGE_CONTAINER_VIEW, isFromICV) if (originalViewList != null) { val leftList = arrayListOf()