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<ImagePreviewActivityBinding, SimpleViewModel> {
|
|
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<String> images = new ArrayList<>(1);
|
images.add(url);
|
start(context, images);
|
}
|
|
public static void start(Context context, List<String> urls) {
|
start(context, urls, 0);
|
}
|
|
public static void start(Context context, List<String> 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<String>) 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<String> 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();
|
}
|
|
|
}
|