package com.ckkj.water.guide; import android.content.Intent; import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.view.animation.AlphaAnimation; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; import androidx.core.content.ContextCompat; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import com.bumptech.glide.Glide; import com.ckkj.water.AppConfig; import com.ckkj.water.ConstantUtil; import com.ckkj.water.R; import com.ckkj.water.base.BaseActivity; import com.ckkj.water.databinding.GuideActivityLayoutBinding; import com.ckkj.water.login.entity.LoginEntity; import com.ckkj.water.login.mvp.LoginContract; import com.ckkj.water.login.mvp.LoginImpl; import com.ckkj.water.login.mvp.LoginPresenter; import com.ckkj.water.main.activity.MainActivity; import com.ckkj.water.network.BaseBean; import com.ckkj.water.utils.dataUtil.SharePreUtil; import java.util.ArrayList; import java.util.List; public class GuideActivity extends BaseActivity implements LoginContract.LoginView { private List mImgUrls = new ArrayList<>(); private List mPointList = new ArrayList<>(); private boolean mHasEnterAppFlag = false; private String desc[] = {"探索你的个性特征", "一键生成,智能排盘工具", "贴心提供每日生活指南"}; private int[] guideDrawableIds = { R.mipmap.img_guide_1, R.mipmap.img_guide_2, R.mipmap.img_guide_3 }; @Override public LoginPresenter createPresenter() { return new LoginPresenter(new LoginImpl()); } @Override public void initData(Bundle savedInstanceState) { super.initData(savedInstanceState); for (int resId : guideDrawableIds) { mImgUrls.add(ContextCompat.getDrawable(mContext, resId)); } mHasEnterAppFlag = SharePreUtil.getBoolean(ConstantUtil.SHARE_PRE_NAME, mContext, ConstantUtil.FIRST_ENTER_APP_FLAG); if (!mHasEnterAppFlag) { viewBinding.viewpage.setAdapter(new MyAdapter()); viewBinding.viewpage.setPageTransformer(true, new CrossFadePageTransformer()); viewBinding.viewpage.setOffscreenPageLimit(1); viewBinding.viewpage.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { setPointSelect(position); if (position == mImgUrls.size() - 1) { viewBinding.tvStart.setVisibility(View.VISIBLE); AlphaAnimation fadeIn = new AlphaAnimation(0f, 1f); fadeIn.setDuration(400); viewBinding.tvStart.startAnimation(fadeIn); } else { viewBinding.tvStart.setVisibility(View.INVISIBLE); } } @Override public void onPageScrollStateChanged(int state) { } }); } viewBinding.tvStart.setOnClickListener(v -> { SharePreUtil.putBoolean(ConstantUtil.SHARE_PRE_NAME, mContext, ConstantUtil.FIRST_ENTER_APP_FLAG, true); Intent intent = new Intent(mContext, MainActivity.class); startActivity(intent); finish(); }); } private void setPointSelect(int position) { for (int i = 0; i < mPointList.size(); i++) { mPointList.get(i).setImageResource( i == position ? R.drawable.indicator_dot_selected : R.drawable.indicator_dot_normal); } } private int dp2px(float dp) { float density = getResources().getDisplayMetrics().density; return Math.round(dp * density); } @Override protected void initWidget() { super.initWidget(); } @Override public void registerSuccess(BaseBean bean) { } @Override public void getPhoneCodeSuccess(BaseBean bean) { } @Override public void loginBySmsCodeSuccess(LoginEntity entity) { } @Override public void updateUserPasswordSuccess(BaseBean bean) { } class MyAdapter extends PagerAdapter { @Override public int getCount() { return mImgUrls.size(); } @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object obj) { return view == obj; } @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) { FrameLayout page = new FrameLayout(mContext); page.setLayoutParams(new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT )); ImageView imageView = new ImageView(mContext); imageView.setAdjustViewBounds(true); imageView.setScaleType(ImageView.ScaleType.FIT_CENTER); FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.TOP | Gravity.CENTER_HORIZONTAL ); imageView.setLayoutParams(lp); Glide.with(mContext).load(mImgUrls.get(position)).into(imageView); page.addView(imageView); container.addView(page); return page; } @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { container.removeView((View) object); } } /** * Cross-fade page transition: outgoing page fades out (alpha 1→0), * incoming page fades in (alpha 0→1) simultaneously. */ public class CrossFadePageTransformer implements ViewPager.PageTransformer { private static final float MIN_ALPHA = 0.0f; @Override public void transformPage(@NonNull View page, float position) { if (position < -1f) { page.setAlpha(MIN_ALPHA); } else if (position <= 0f) { page.setAlpha(1f + position); } else if (position <= 1f) { page.setAlpha(1f - position); } else { page.setAlpha(MIN_ALPHA); } } } @RequiresApi(api = Build.VERSION_CODES.P) @Override public int getLayoutResId(Bundle savedInstanceState) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { hideStatusBar(); } hideBottomUIMenu(); return R.layout.guide_activity_layout; } @Override public void showError(String message) { } @Override public void logOut(BaseBean bean) { } @RequiresApi(api = Build.VERSION_CODES.P) protected void hideStatusBar() { WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; getWindow().setAttributes(lp); } protected void hideBottomUIMenu() { getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { View v = this.getWindow().getDecorView(); v.setSystemUiVisibility(View.GONE); } else if (Build.VERSION.SDK_INT >= 19) { View decorView = getWindow().getDecorView(); int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; decorView.setSystemUiVisibility(uiOptions); } } }