package com.application.zhangshi_app_android.ui; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.view.View; import android.widget.BaseAdapter; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import androidx.viewpager.widget.ViewPager; import androidx.viewpager2.widget.ViewPager2; import com.android.app_base.base.adapter.BaseRVAdapter; import com.android.app_base.base.view.BaseActivity; import com.android.app_base.base.viewmodel.BaseViewModel; import com.application.zhangshi_app_android.BR; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.adapter.ImagePreviewAdapter; import com.application.zhangshi_app_android.data.DataRepository; import com.application.zhangshi_app_android.databinding.ImagePreviewActivityBinding; import com.gyf.immersionbar.BarHide; import com.gyf.immersionbar.ImmersionBar; import com.youth.banner.indicator.CircleIndicator; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * @author Ljj * @date 2023.08.19. 16:53 * @desc */ public final class ImagePreviewActivity extends BaseActivity { private static final String INTENT_KEY_IN_IMAGE_LIST = "imageList"; private static final String INTENT_KEY_IN_IMAGE_INDEX = "imageIndex"; public static void start(Context context, String url) { ArrayList images = new ArrayList<>(1); images.add(url); start(context, images); } public static void start(Context context, List urls) { start(context, urls, 0); } public static void start(Context context, List urls, int index) { if (urls == null || urls.isEmpty()) { return; } Intent intent = new Intent(context, ImagePreviewActivity.class); if (urls.size() > 2000) { // 请注意:如果传输的数据量过大,会抛出此异常,并且这种异常是不能被捕获的 // 所以当图片数量过多的时候,我们应当只显示一张,这种一般是手机图片过多导致的 // 经过测试,传入 3121 张图片集合的时候会抛出此异常,所以保险值应当是 2000 // android.os.TransactionTooLargeException: data parcel size 521984 bytes urls = Collections.singletonList(urls.get(index)); } if (urls instanceof ArrayList) { intent.putExtra(INTENT_KEY_IN_IMAGE_LIST, (ArrayList) urls); } else { intent.putExtra(INTENT_KEY_IN_IMAGE_LIST, new ArrayList<>(urls)); } intent.putExtra(INTENT_KEY_IN_IMAGE_INDEX, index); if (!(context instanceof Activity)) { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); } context.startActivity(intent); } private ImagePreviewAdapter mAdapter; @Override public int getLayoutId() { return R.layout.image_preview_activity; } @Override public int getVariableId() { return 0; } @Override public void initParam() { } @Override public void initView() { mAdapter = new ImagePreviewAdapter(this); mAdapter.setOnItemClickListener(new BaseRVAdapter.OnItemClickListener() { @Override public void onItemClick(RecyclerView recyclerView, View itemView, int position) { if (isFinishing() || isDestroyed()) { return; } // 单击图片退出当前的 Activity finish(); } }); binding.viewPager.setAdapter(mAdapter); binding.viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { @Override public void onPageSelected(int position) { super.onPageSelected(position); binding.tvImagePreviewIndicator.setText((position + 1) + "/" + mAdapter.getItemCount()); } }); } @Override public void initData() { ArrayList images = getIntent().getStringArrayListExtra(INTENT_KEY_IN_IMAGE_LIST); if (images == null || images.isEmpty()) { finish(); return; } mAdapter.setData(images); if (images.size() != 1) { binding.tvImagePreviewIndicator.setVisibility(View.VISIBLE); int index = getIntent().getIntExtra(INTENT_KEY_IN_IMAGE_INDEX,0); if (index < images.size()) { binding.viewPager.setCurrentItem(index); } } } @Override public void initLiveDataObserve() { } @NonNull @Override protected ImmersionBar createStatusBarConfig() { return super.createStatusBarConfig() // 隐藏状态栏和导航栏 .hideBar(BarHide.FLAG_HIDE_BAR); } @Override public boolean isStatusBarDarkFont() { return false; } @Override protected void onDestroy() { super.onDestroy(); } }