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 5749405e44..23e9d0a501 100644 --- a/app/src/main/java/com/gh/common/util/ConcernContentUtils.java +++ b/app/src/main/java/com/gh/common/util/ConcernContentUtils.java @@ -2,6 +2,7 @@ package com.gh.common.util; import android.content.Context; import android.content.Intent; +import android.view.View; import android.widget.LinearLayout; import com.facebook.drawee.drawable.ScalingUtils; @@ -18,8 +19,11 @@ import java.util.List; **/ public class ConcernContentUtils { + private static final ArrayList imageViewList = new ArrayList<>(); + public static void addContentPic(Context context, LinearLayout linearLayout, List list, String entrance, int width) { + imageViewList.clear(); int count = list.size(); int index = 0; for (int i = 0, size = (int) Math.ceil(list.size() / 3.0f); i < size; i++) { @@ -30,14 +34,18 @@ public class ConcernContentUtils { ll = new LinearLayout(context); ll.setOrientation(LinearLayout.HORIZONTAL); for (int j = 0; j < 3; j++) { - ll.addView(getImageView(context, list, entrance, index, width, 0)); + SimpleDraweeView draweeView = getImageView(context, list, entrance, index, width, 0); + imageViewList.add(draweeView); + ll.addView(draweeView); index += 1; } linearLayout.addView(ll); count -= 3; break; case 1: - linearLayout.addView(getImageView(context, list, entrance, index, width, 1)); + SimpleDraweeView draweeView = getImageView(context, list, entrance, index, width, 1); + imageViewList.add(draweeView); + linearLayout.addView(draweeView); count -= 1; index += 1; break; @@ -45,7 +53,9 @@ public class ConcernContentUtils { ll = new LinearLayout(context); ll.setOrientation(LinearLayout.HORIZONTAL); for (int j = 0; j < 2; j++) { - ll.addView(getImageView(context, list, entrance, index, width, 2)); + SimpleDraweeView imageView = getImageView(context, list, entrance, index, width, 2); + imageViewList.add(imageView); + ll.addView(imageView); index += 1; } linearLayout.addView(ll); @@ -93,7 +103,7 @@ public class ConcernContentUtils { break; } imageView.setOnClickListener(v -> { - Intent checkIntent = ImageViewerActivity.getIntent(context, (ArrayList) list, position, entrance); + 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 ba91393fd2..3c0726b946 100644 --- a/app/src/main/java/com/gh/common/view/ImageContainerView.kt +++ b/app/src/main/java/com/gh/common/view/ImageContainerView.kt @@ -7,6 +7,7 @@ import android.view.View import android.widget.LinearLayout import androidx.core.content.ContextCompat import com.facebook.drawee.drawable.ScalingUtils +import com.facebook.drawee.view.SimpleDraweeView import com.gh.common.util.* import com.gh.gamecenter.ImageViewerActivity import com.gh.gamecenter.R @@ -14,8 +15,9 @@ import com.gh.gamecenter.databinding.ItemCommunityImageBinding import com.gh.gamecenter.manager.UserManager import com.gh.gamecenter.qa.entity.AnswerEntity import com.gh.gamecenter.qa.entity.CommunityVideoEntity +import com.gh.gamecenter.qa.entity.ImageInfo import com.gh.gamecenter.video.detail.VideoDetailContainerViewModel -import java.util.ArrayList +import kotlin.collections.ArrayList class ImageContainerView : LinearLayout { private var mAnswerEntity: AnswerEntity? = null @@ -43,6 +45,8 @@ class ImageContainerView : LinearLayout { private var mOffset = 0 private var index = 0 + private val imageViewList = arrayListOf() + constructor(context: Context) : this(context, null) constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0) constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { @@ -68,6 +72,7 @@ class ImageContainerView : LinearLayout { } fun bindData(entity: AnswerEntity, entrance: String = "", path: String = "") { + imageViewList.clear() mAnswerEntity = entity mEntrance = entrance mPath = path @@ -91,7 +96,7 @@ class ImageContainerView : LinearLayout { images.forEachIndexed { index, url -> val width = if (index <= entity.imagesInfo.size - 1) imagesInfo[index].width else 0 val height = if (index <= entity.imagesInfo.size - 1) imagesInfo[index].height else 0 - bindImage(url, width, height, images.size == 1) + bindImage(url, width, height, images.size == 1, imagesInfo as ArrayList) } } entity.getPassVideos().isNotEmpty() -> { @@ -113,7 +118,7 @@ class ImageContainerView : LinearLayout { val imagesInfo = entity.imagesInfo val width = if (index <= entity.imagesInfo.size - 1) imagesInfo[index].width else 0 val height = if (index <= entity.imagesInfo.size - 1) imagesInfo[index].height else 0 - bindImage(url, width, height, false) + bindImage(url, width, height, false, imagesInfo as ArrayList) } } else { val images = entity.images.take(3) @@ -121,7 +126,7 @@ class ImageContainerView : LinearLayout { val imagesInfo = entity.imagesInfo val width = if (index <= entity.imagesInfo.size - 1) imagesInfo[index].width else 0 val height = if (index <= entity.imagesInfo.size - 1) imagesInfo[index].height else 0 - bindImage(url, width, height, images.size == 1) + bindImage(url, width, height, images.size == 1, imagesInfo as ArrayList) } } } @@ -150,10 +155,11 @@ class ImageContainerView : LinearLayout { index++ } - private fun bindImage(url: String, width: Int, height: Int, isChangeRatio: Boolean) { + private fun bindImage(url: String, width: Int, height: Int, isChangeRatio: Boolean, imageInfo: ArrayList) { val binding = ItemCommunityImageBinding.inflate(LayoutInflater.from(context), null, false) binding.root.tag = index addView(binding.root) + imageViewList.add(binding.image) binding.durationOrNumTv.visibility = View.GONE binding.videoPlay.visibility = View.GONE displayImage(binding, url, width.toFloat(), height.toFloat(), isChangeRatio) @@ -170,8 +176,8 @@ class ImageContainerView : LinearLayout { if (mAnswerEntity?.communityId.isNullOrEmpty()) { mAnswerEntity?.communityId = mAnswerEntity?.bbs?.id } - val intent = ImageViewerActivity.getIntent(context, mAnswerEntity!!.images as ArrayList, position, binding.root, - if (mAnswerEntity?.type == "community_article") mAnswerEntity else null, mEntrance) + val intent = ImageViewerActivity.getIntent(context, mAnswerEntity!!.images as ArrayList, position, imageViewList, + if (mAnswerEntity?.type == "community_article") mAnswerEntity else null, mEntrance, imageInfo) 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 28730f92a3..be13c303de 100644 --- a/app/src/main/java/com/gh/gamecenter/ImageViewerActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/ImageViewerActivity.kt @@ -7,6 +7,7 @@ import android.app.Activity import android.app.Dialog import android.content.Context import android.content.Intent +import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.Color import android.net.Uri @@ -14,6 +15,7 @@ import android.os.Bundle import android.text.TextUtils import android.util.Base64 import android.util.DisplayMetrics +import android.util.SparseArray import android.view.View import android.view.ViewGroup import android.view.ViewTreeObserver.OnGlobalLayoutListener @@ -24,10 +26,10 @@ import android.widget.LinearLayout import android.widget.RelativeLayout import android.widget.TextView import androidx.core.content.ContextCompat +import androidx.core.util.isNotEmpty import androidx.viewpager.widget.PagerAdapter import androidx.viewpager.widget.ViewPager import androidx.viewpager.widget.ViewPager.OnPageChangeListener -import butterknife.BindView import com.facebook.drawee.backends.pipeline.Fresco import com.facebook.imagepipeline.core.ImagePipeline import com.facebook.imagepipeline.request.ImageRequest @@ -39,10 +41,12 @@ import com.gh.common.util.* import com.gh.common.util.ImageUtils.getTransformedUrl import com.gh.common.view.DraggableBigImageView import com.gh.common.view.Gh_RelativeLayout +import com.gh.gamecenter.databinding.ActivityViewimageBinding import com.gh.gamecenter.entity.CommunityEntity import com.gh.gamecenter.entity.ImageInfoEntity import com.gh.gamecenter.qa.article.detail.ArticleDetailActivity import com.gh.gamecenter.qa.entity.AnswerEntity +import com.gh.gamecenter.qa.entity.ImageInfo import com.gh.gamecenter.retrofit.Response import com.gh.gamecenter.retrofit.RetrofitManager import com.github.piasy.biv.view.BigImageView @@ -61,27 +65,15 @@ import kotlin.collections.ArrayList */ class ImageViewerActivity : BaseActivity(), OnPageChangeListener { - @BindView(R.id.image_detail_page) lateinit var mViewPager: ViewPager - - @BindView(R.id.image_detail_progress) lateinit var mProgressHint: TextView - - @BindView(R.id.image_mask) lateinit var mIndicatorMask: View - - @BindView(R.id.image_indicator_tv) lateinit var mIndicatorTv: TextView - - @BindView(R.id.background_view) lateinit var mBackgroundView: View - - @BindView(R.id.btn_save_pic) lateinit var mSavePicBtn: View - - @BindView(R.id.btn_article_detail) lateinit var mArticleDetailBtn: View + private lateinit var mBinding: ActivityViewimageBinding private var adapter: ViewImageAdapter? = null private var mImagePipeline: ImagePipeline? = null private var mShowBase64Image = false @@ -89,14 +81,22 @@ class ImageViewerActivity : BaseActivity(), OnPageChangeListener { private var mViewedSet: HashSet? = null // 让调用者知道该图片是否被看过了 private var mImageInfoMap: MutableMap? = null private var mBigImageView: BigImageView? = null + private var mImageViewMap = SparseArray() private var mFinalUrl = "" private var mInitialPosition = 0 private var mUseEnterAndExitAnimation = false + private var mIsGameGallery = false + private var mImageInfo: ArrayList? = null + private var mImageInfoArray = SparseArray() private var mShowSaveBtn = false private var mAnswerEntity: AnswerEntity? = null private var mLimitWidth = 0 + private var mOriginLeftList: ArrayList? = null + private var mOriginTopList: ArrayList? = null + private var mOriginHeightList: ArrayList? = null + private var mOriginWidthList: ArrayList? = null private var mOriginLeft = 0 private var mOriginTop = 0 private var mOriginHeight = 0 @@ -110,12 +110,23 @@ class ImageViewerActivity : BaseActivity(), OnPageChangeListener { private var mScaleY = 0f private var mTranslationX = 0f private var mTranslationY = 0f + private var mTargetCenterX = 0f + private var mTargetCenterY = 0f override fun getLayoutId() = R.layout.activity_viewimage override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + mBinding = ActivityViewimageBinding.bind(mContentView) + mViewPager = mBinding.imageDetailPage + mProgressHint = mBinding.imageDetailProgress + mIndicatorMask = mBinding.imageMask + mIndicatorTv = mBinding.imageIndicatorTv + mBackgroundView = mBinding.backgroundView + mSavePicBtn = mBinding.btnSavePic + mArticleDetailBtn = mBinding.btnArticleDetail + mViewedSet = HashSet() mImageInfoMap = HashMap() mImagePipeline = Fresco.getImagePipeline() @@ -133,7 +144,13 @@ class ImageViewerActivity : BaseActivity(), OnPageChangeListener { } mShowSaveBtn = it.getBoolean(KEY_SHOW_SAVE) mUseEnterAndExitAnimation = it.getBoolean(KEY_USE_ENTER_AND_EXIT_ANIMATION) + mImageInfo = it.getParcelableArrayList(KEY_IMAGE_INFO) mAnswerEntity = it.getParcelable(AnswerEntity::class.java.name) + mOriginLeftList = it.getIntegerArrayList(KEY_LEFT) + mOriginTopList = it.getIntegerArrayList(KEY_TOP) + mOriginHeightList = it.getIntegerArrayList(KEY_HEIGHT) + mOriginWidthList = it.getIntegerArrayList(KEY_WIDTH) + mIsGameGallery = it.getBoolean(KEY_IS_GAME_GALLERY) } if (mUrlList?.isEmpty() == true) { @@ -141,6 +158,8 @@ class ImageViewerActivity : BaseActivity(), OnPageChangeListener { finish() } + getImageInfo() + mSavePicBtn.visibleIf(mShowSaveBtn) mArticleDetailBtn.visibleIf(mAnswerEntity != null) mIndicatorMask.goneIf(mUrlList?.size == 1) @@ -225,6 +244,7 @@ class ImageViewerActivity : BaseActivity(), OnPageChangeListener { mUrlList?.clear() image = "" } + mImageViewMap.clear() } @SuppressLint("SetTextI18n") @@ -251,6 +271,48 @@ class ImageViewerActivity : BaseActivity(), OnPageChangeListener { setResult(Activity.RESULT_OK, Intent().putExtra(VIEWED_IMAGE, mViewedSet)) } + private fun updateOriginPosition(position: Int) { + if (position >= mOriginLeftList?.size ?: 0 || position >= mOriginTopList?.size ?: 0 || position >= mOriginHeightList?.size ?: 0 || position >= mOriginWidthList?.size ?: 0) return + mBigImageView = mImageViewMap[position] + mOriginLeft = mOriginLeftList?.safelyGetInRelease(position) ?: 0 + mOriginTop = mOriginTopList?.safelyGetInRelease(position) ?: 0 + mOriginHeight = mOriginHeightList?.safelyGetInRelease(position) ?: 0 + mOriginWidth = mOriginWidthList?.safelyGetInRelease(position) ?: 0 + if (mIsGameGallery) { + mOriginLeft = (mOriginLeftList?.safelyGetInRelease(mInitialPosition) ?: 0) + ((mOriginWidthList?.safelyGetInRelease(mInitialPosition) ?: 0) + 8F.dip2px()) * (position - mInitialPosition) + mOriginTop = mOriginTopList?.safelyGetInRelease(mInitialPosition) ?: 0 + } + resizeImage(position) + mOriginCenterX = mOriginLeft + mOriginWidth / 2 + mOriginCenterY = mOriginTop + mOriginHeight / 2 + mOriginHeightWidthRatio = mOriginHeight.toFloat() / mOriginWidth + mScaleX = mOriginWidth.toFloat() / mTargetWidth + mScaleY = mScaleX + mTranslationX = mOriginCenterX - mTargetCenterX + mTranslationY = mOriginCenterY - mTargetCenterY + } + + // 处理非等比例缩放的图片 + private fun resizeImage(position: Int) { + if (!mImageInfo.isNullOrEmpty()) { + mImageInfo?.safelyGetInRelease(position)?.let { + val currentRatio = it.width / it.height.toFloat() + if (currentRatio > 1F) { + mOriginWidth = (mOriginHeight * currentRatio).toInt() + mOriginLeft -= (mOriginWidth - (mOriginWidthList?.safelyGetInRelease(position) ?: 0)) / 2 + } + } + } else if (mImageInfoArray.isNotEmpty()) { + mImageInfoArray.get(position)?.let { + val currentRatio = it.width / it.height.toFloat() + if (currentRatio > 1F) { + mOriginWidth = (mOriginHeight * currentRatio).toInt() + mOriginLeft -= (mOriginWidth - (mOriginWidthList?.safelyGetInRelease(position) ?: 0)) / 2 + } + } + } + } + override fun onPageSelected(position: Int) { /*var ghRelativeLayout: Gh_RelativeLayout? for (i in 0 until mViewPager.childCount) { @@ -265,6 +327,9 @@ class ImageViewerActivity : BaseActivity(), OnPageChangeListener { } }*/ mIndicatorTv.text = String.format("%d/%d", position + 1, mUrlList!!.size) + if (mUseEnterAndExitAnimation) { + updateOriginPosition(position) + } } override fun onPageScrollStateChanged(newState: Int) {} @@ -274,10 +339,11 @@ class ImageViewerActivity : BaseActivity(), OnPageChangeListener { .addOnGlobalLayoutListener(object : OnGlobalLayoutListener { override fun onGlobalLayout() { mViewPager.viewTreeObserver.removeOnGlobalLayoutListener(this) - mOriginLeft = intent.getIntExtra(KEY_LEFT, 0) - mOriginTop = intent.getIntExtra(KEY_TOP, 0) - mOriginHeight = intent.getIntExtra(KEY_HEIGHT, 0) - mOriginWidth = intent.getIntExtra(KEY_WIDTH, 0) + mOriginLeft = mOriginLeftList?.safelyGetInRelease(mInitialPosition) ?: 0 + mOriginTop = mOriginTopList?.safelyGetInRelease(mInitialPosition) ?: 0 + mOriginHeight = mOriginHeightList?.safelyGetInRelease(mInitialPosition) ?: 0 + mOriginWidth = mOriginWidthList?.safelyGetInRelease(mInitialPosition) ?: 0 + resizeImage(mInitialPosition) mOriginCenterX = mOriginLeft + mOriginWidth / 2 mOriginCenterY = mOriginTop + mOriginHeight / 2 mOriginHeightWidthRatio = mOriginHeight.toFloat() / mOriginWidth @@ -288,10 +354,10 @@ class ImageViewerActivity : BaseActivity(), OnPageChangeListener { mScaleX = mOriginWidth.toFloat() / mTargetWidth // TODO 非等比例缩放的图片动画不正常 mScaleY = mScaleX - val targetCenterX = location[0] + mTargetWidth / 2 - val targetCenterY = location[1] + mTargetHeight / 2 - mTranslationX = mOriginCenterX - targetCenterX - mTranslationY = mOriginCenterY - targetCenterY + mTargetCenterX = location[0] + mTargetWidth / 2 + mTargetCenterY = location[1] + mTargetHeight / 2 + mTranslationX = mOriginCenterX - mTargetCenterX + mTranslationY = mOriginCenterY - mTargetCenterY if (mUseEnterAndExitAnimation) { mBigImageView?.translationX = mTranslationX @@ -323,6 +389,21 @@ class ImageViewerActivity : BaseActivity(), OnPageChangeListener { }) } + private fun getImageInfo() { + if (!mImageInfo.isNullOrEmpty() || !mUseEnterAndExitAnimation) return + for ((index, url) in mUrlList!!.withIndex()) { + ImageUtils.getBitmap(url, object: BiCallback{ + override fun onFirst(first: Bitmap) { + mImageInfoArray.append(index, ImageInfo(first.width, first.height)) + updateOriginPosition(mViewPager.currentItem) + } + + override fun onSecond(second: Boolean) { + } + }) + } + } + private fun loadImage(thumbnailUrl: String, compressedUrl: String?, imageView: BigImageView) { @@ -491,12 +572,15 @@ class ImageViewerActivity : BaseActivity(), OnPageChangeListener { val isInDiskCache = imageRequest != null && mImagePipeline!!.isInDiskCacheSync(imageRequest) val view = View.inflate(container.context, R.layout.viewimage_normal_item, null) as Gh_RelativeLayout val imageView: DraggableBigImageView = view.findViewById(R.id.viewimage_iv_show) + if (mUseEnterAndExitAnimation) { + mImageViewMap.put(position, imageView) + } if (mBigImageView == null) { mBigImageView = imageView } imageView.setDragListener(object : DraggableBigImageView.DragListener { override fun onRelease(draggableBigImageView: DraggableBigImageView, scale: Float) { - performExitAnimation(draggableBigImageView, scale, mViewPager.currentItem != mInitialPosition) + performExitAnimation(draggableBigImageView, scale, false) } override fun onDrag(draggableBigImageView: DraggableBigImageView, fraction: Float) { @@ -539,7 +623,7 @@ class ImageViewerActivity : BaseActivity(), OnPageChangeListener { // ssiv.resetScaleAndCenter() // } // }) - ssiv.setOnClickListener { finishWithAnimation(mInitialPosition != mViewPager.currentItem) } + ssiv.setOnClickListener { finishWithAnimation(false) } } } }) @@ -599,7 +683,7 @@ class ImageViewerActivity : BaseActivity(), OnPageChangeListener { } override fun onBackPressed() { - finishWithAnimation(mInitialPosition != mViewPager.currentItem) + finishWithAnimation(false) } companion object { @@ -611,6 +695,8 @@ 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_IMAGE_INFO = "image_info" + private const val KEY_IS_GAME_GALLERY = "game_gallery" private const val KEY_LEFT = "left" private const val KEY_TOP = "top" @@ -632,36 +718,50 @@ class ImageViewerActivity : BaseActivity(), OnPageChangeListener { } @JvmStatic - fun getIntent(context: Context, list: ArrayList, position: Int = 0, originalView: View? = null, entrance: String?): Intent { - return getIntent(context, list, position, originalView, entrance, false) + fun getIntent(context: Context, list: ArrayList, position: Int = 0, originalViewList: List? = null, entrance: String?): Intent { + return getIntent(context, list, position, originalViewList, entrance, false) } @JvmStatic - fun getIntent(context: Context, list: ArrayList, position: Int = 0, originalView: View? = null, answerEntity: AnswerEntity? = null, entrance: String?): Intent { - return getIntent(context, list, position, originalView, entrance, false, answerEntity) + fun getIntent(context: Context, list: ArrayList, position: Int = 0, originalViewList: List? = null, answerEntity: AnswerEntity? = null, entrance: String?, imageInfo: ArrayList? = null): Intent { + return getIntent(context, list, position, originalViewList, entrance, false, answerEntity, imageInfo) } /** - * 传入 view 代表使用渐入渐出动画 + * 传入 viewList 代表使用渐入渐出动画 */ @JvmStatic - fun getIntent(context: Context, list: ArrayList, position: Int = 0, originalView: View? = null, entrance: String?, isShowSaveBtn: Boolean, answerEntity: AnswerEntity? = null): Intent { + fun getIntent(context: Context, list: ArrayList, position: Int = 0, originalViewList: List? = null, entrance: String?, isShowSaveBtn: Boolean, answerEntity: AnswerEntity? = null, imageInfo: ArrayList? = null, isGameGallery: 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_GAME_GALLERY, isGameGallery) - val location = IntArray(2) - if (originalView != null) { - originalView.getLocationOnScreen(location) - intent.putExtra(KEY_LEFT, location[0]) - intent.putExtra(KEY_TOP, location[1]) - intent.putExtra(KEY_HEIGHT, originalView.height) - intent.putExtra(KEY_WIDTH, originalView.width) + if (originalViewList != null) { + val leftList = arrayListOf() + val topList = arrayListOf() + val heightList = arrayListOf() + val widthList = arrayListOf() + for (originalView in originalViewList) { + val location = IntArray(2) + originalView.getLocationOnScreen(location) + leftList.add(location[0]) + topList.add(location[1]) + heightList.add(originalView.height) + widthList.add(originalView.width) + } + intent.putExtra(KEY_LEFT, leftList) + intent.putExtra(KEY_TOP, topList) + intent.putExtra(KEY_HEIGHT, heightList) + intent.putExtra(KEY_WIDTH, widthList) intent.putExtra(KEY_USE_ENTER_AND_EXIT_ANIMATION, true) } + if (imageInfo != null) { + intent.putExtra(KEY_IMAGE_INFO, imageInfo) + } if (context is Activity) { context.overridePendingTransition(0, 0) diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameGalleryAdapter.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameGalleryAdapter.kt index 78e25ac4bd..1cbe0e8d69 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameGalleryAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameGalleryAdapter.kt @@ -8,6 +8,7 @@ import android.view.ViewGroup import androidx.databinding.DataBindingUtil import androidx.recyclerview.widget.RecyclerView import butterknife.BindView +import com.facebook.drawee.view.SimpleDraweeView import com.gh.base.BaseRecyclerViewHolder import com.gh.common.util.* import com.gh.common.view.WrapContentDraweeView @@ -17,6 +18,7 @@ import com.gh.gamecenter.databinding.GalleryVideoItemBinding import com.gh.gamecenter.entity.GameDetailEntity import com.gh.gamecenter.entity.GameEntity import com.gh.gamecenter.video.detail.VideoDetailContainerViewModel +import com.lightgame.utils.Utils class GameGalleryAdapter(var context: Context, private val mVideo: ArrayList? = null, @@ -25,6 +27,7 @@ class GameGalleryAdapter(var context: Context, private val mEntrance: String) : RecyclerView.Adapter() { var mLayoutInflater: LayoutInflater = (context as Activity).layoutInflater + private val imageViewList = mutableListOf() companion object { const val IMAGE = 223 @@ -67,14 +70,19 @@ class GameGalleryAdapter(var context: Context, MtaHelper.onEvent("游戏详情_新", "点击游戏截图", mGame.name) val intent = ImageViewerActivity.getIntent( - context, - mGallery ?: arrayListOf(), - holder.adapterPosition, - holder.itemView, - mEntrance) - + context, + mGallery ?: arrayListOf(), + holder.adapterPosition, + imageViewList, + mEntrance, + false, + isGameGallery = true + ) context.startActivity(intent) } + if (!imageViewList.contains(holder.screenshotIv)) { + imageViewList.add(holder.screenshotIv) + } } is VideoViewHolder -> { val video = mVideo?.get(position) diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeFragment.kt b/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeFragment.kt index 11572fd264..b857082ae5 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeFragment.kt @@ -530,7 +530,7 @@ class UserHomeFragment : NormalFragment() { requireContext(), arrayListOf(personalData.background!!.url), 0, - userIcon, + arrayListOf(userIcon), "$mEntrance+($mPath)", true ) @@ -575,7 +575,7 @@ class UserHomeFragment : NormalFragment() { requireContext(), arrayListOf(personalData.icon), 0, - userIcon, + arrayListOf(userIcon.avatarView as View), "$mEntrance+($mPath)", true ) diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/border/AvatarBorderFragment.kt b/app/src/main/java/com/gh/gamecenter/personalhome/border/AvatarBorderFragment.kt index 2f61c93db0..9cbba19c09 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/border/AvatarBorderFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/border/AvatarBorderFragment.kt @@ -125,7 +125,7 @@ class AvatarBorderFragment : NormalFragment() { userAvatar.setOnClickListener { startActivity(ImageViewerActivity.getIntent(requireContext(), arrayListOf(UserManager.getInstance().userInfoEntity?.icon - ?: ""), 0, userAvatar, "$mEntrance+(头像挂件)", true)) + ?: ""), 0, arrayListOf(userAvatar.avatarView as View), "$mEntrance+(头像挂件)", true)) } changeAvatarTv.setOnClickListener { diff --git a/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailFragment.kt index 13dd7776ce..31320a1e77 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailFragment.kt @@ -131,6 +131,8 @@ open class AnswerDetailFragment : NormalFragment() { lateinit var mViewModel: AnswerDetailViewModel private lateinit var mContainerViewModel: AnswerDetailContainerViewModel + private var mImageViewList: ArrayList? = null + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -166,6 +168,7 @@ open class AnswerDetailFragment : NormalFragment() { mBinding.richEditor.addJavascriptInterface(JsInterface(), "imagelistener") mBinding.richEditor.addJavascriptInterface(OnLinkClickListener(requireContext(), "", "", mEntrance, "回答详情"), "OnLinkClickListener") mSkeletonScreen = Skeleton.bind(mBinding.skeletonMask).load(R.layout.fragment_answer_detail_skeleton).shimmer(false).show() + mImageViewList = arrayListOf(view.findViewById(R.id.questionsdetail_item_pic1), view.findViewById(R.id.questionsdetail_item_pic2), view.findViewById(R.id.questionsdetail_item_pic3)) } override fun onActivityCreated(savedInstanceState: Bundle?) { @@ -941,7 +944,7 @@ open class AnswerDetailFragment : NormalFragment() { val images = ArrayList(mViewModel.answerDetail?.question?.images) if (position <= images.size) { - val intent = ImageViewerActivity.getIntent(requireContext(), images, position, view, "$mEntrance+(回答详情)") + val intent = ImageViewerActivity.getIntent(requireContext(), images, position, mImageViewList, "$mEntrance+(回答详情)") startActivity(intent) } } diff --git a/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditActivity.kt b/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditActivity.kt index 85c3f2dbd7..959197e3c9 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditActivity.kt @@ -14,6 +14,7 @@ import android.view.inputmethod.InputMethodManager import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders import butterknife.OnClick +import com.facebook.drawee.view.SimpleDraweeView import com.gh.base.BaseRichEditorActivity import com.gh.base.fragment.WaitingDialogFragment import com.gh.common.AppExecutor @@ -46,6 +47,7 @@ class AnswerEditActivity : BaseRichEditorActivity(), Keyboa private var mUploadImageCancelDialog: Dialog? = null private var mCommunityName: String? = null private var mOpenAnswerInNewPage: Boolean = false + private var mImageViewList: ArrayList? = null override fun mtaEventName(): String { return "回答详情" // issues 定的就是回答详情 @@ -112,6 +114,8 @@ class AnswerEditActivity : BaseRichEditorActivity(), Keyboa } checkPostButtonEnable() + + mImageViewList = arrayListOf(findViewById(R.id.question_images_1), findViewById(R.id.question_images_2), findViewById(R.id.question_images_3)) } override fun provideViewModel(): AnswerEditViewModel { @@ -464,7 +468,7 @@ class AnswerEditActivity : BaseRichEditorActivity(), Keyboa private fun showQuestionImageDetail(view: View, position: Int) { val images = ArrayList(mViewModel.question.images) if (position <= images.size) { - val intent = ImageViewerActivity.getIntent(this, images, position, view, "$mEntrance+(回答编辑)") + val intent = ImageViewerActivity.getIntent(this, images, position, mImageViewList, "$mEntrance+(回答编辑)") startActivity(intent) } } diff --git a/app/src/main/java/com/gh/gamecenter/qa/comment/CommentPictureAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/comment/CommentPictureAdapter.kt index 3a49f186bd..87f1f694fe 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/comment/CommentPictureAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/comment/CommentPictureAdapter.kt @@ -1,8 +1,10 @@ package com.gh.gamecenter.qa.comment import android.content.Context +import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView +import com.facebook.drawee.view.SimpleDraweeView import com.gh.common.util.toBinding import com.gh.gamecenter.ImageViewerActivity import com.gh.gamecenter.databinding.ItemCommentPictureBinding @@ -12,6 +14,7 @@ class CommentPictureAdapter(val context: Context, var pictureList: ArrayList(context) { private var countAndKey: Pair? = null + private val imageViewList = mutableListOf() init { var dataIds = "" @@ -30,9 +33,12 @@ class CommentPictureAdapter(val context: Context, var pictureList: ArrayList? = null + val questionsTitle: String get() = mAdapter?.getQuestionsTitle() ?: "" @@ -237,6 +240,8 @@ class QuestionsDetailFragment : } } } + + mImageViewList = arrayListOf(view.findViewById(R.id.questionsdetail_item_pic1), view.findViewById(R.id.questionsdetail_item_pic2), view.findViewById(R.id.questionsdetail_item_pic3)) } override fun onDestroyView() { @@ -301,7 +306,7 @@ class QuestionsDetailFragment : val intent = ImageViewerActivity.getIntent(requireContext(), ArrayList(mQuestionsDetailEntity!!.images), imgPosition, - view, + mImageViewList, "$mEntrance+(问题详情-答案列表)") startActivity(intent) } @@ -313,7 +318,7 @@ class QuestionsDetailFragment : val intent = ImageViewerActivity.getIntent(requireContext(), ArrayList(mQuestionsDetailEntity!!.images), imgPosition, - view, + mImageViewList, "$mEntrance+(问题详情-答案列表)") startActivity(intent) } @@ -324,7 +329,7 @@ class QuestionsDetailFragment : val intent = ImageViewerActivity.getIntent(requireContext(), ArrayList(mQuestionsDetailEntity!!.images), imgPosition, - view, + mImageViewList, "$mEntrance+(问题详情-答案列表)") startActivity(intent) }