This commit is contained in:
fengjignqi
2026-05-16 16:19:39 +08:00
commit 1b1575eb8a
1632 changed files with 242221 additions and 0 deletions

View File

@@ -0,0 +1,236 @@
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<GuideActivityLayoutBinding, LoginPresenter>
implements LoginContract.LoginView {
private List<Drawable> mImgUrls = new ArrayList<>();
private List<ImageView> 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 getPhoneCodeSuccess(BaseBean bean) {
}
@Override
public void loginBySmsCodeSuccess(LoginEntity entity) {
}
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);
}
}
}

View File

@@ -0,0 +1,156 @@
package com.ckkj.water.guide;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import com.ckkj.water.login.LoginActivity;
import com.gyf.immersionbar.ImmersionBar;
import com.ckkj.water.ConstantUtil;
import com.ckkj.water.MyApplication;
import com.ckkj.water.R;
import com.ckkj.water.base.BaseActivity;
import com.ckkj.water.base.entity.MineUserInfoBean;
import com.ckkj.water.databinding.GuideLayoutBinding;
import com.ckkj.water.main.MainContract;
import com.ckkj.water.main.MainImpl;
import com.ckkj.water.main.MainPresenter;
import com.ckkj.water.main.activity.MainActivity;
import com.ckkj.water.main.entity.CheckVersionEntity;
import com.ckkj.water.mine.WebviewUserAgreement;
import com.ckkj.water.network.BaseBean;
import com.ckkj.water.utils.dataUtil.SharePreUtil;
import com.ckkj.water.utils.manager.ActivityManager;
import me.jessyan.autosize.internal.CancelAdapt;
import me.jessyan.autosize.internal.CustomAdapt;
/**
* @author fengxiaoyang
* @date 2025/7/7
* @description TODO: 启动页面
*/
public class LaunchActivity extends BaseActivity<GuideLayoutBinding, MainPresenter>
implements MainContract.MainView, CancelAdapt {
private boolean mIsFirstEnterApp = false;
@Override
public void initData(Bundle savedInstanceState) {
super.initData(savedInstanceState);
viewBinding.includeTitle.imgBack.setVisibility(View.GONE);
viewBinding.includeTitle.tvTitle.setVisibility(View.GONE);
ImmersionBar.with(this)
.statusBarColor(R.color.white)
.statusBarDarkFont(true)
.titleBar(viewBinding.rlTitle) // 替换为你的标题栏View
.keyboardEnable(true)
.navigationBarDarkIcon(true)
.init();
mIsFirstEnterApp = SharePreUtil.getBooleanDefTrue(ConstantUtil.SHARE_PRE_NAME, mContext, ConstantUtil.FIRST_ENTER_APP_AGREEMENT_TIPS);
//首次进入,弹框提示隐私政策
if (mIsFirstEnterApp) {
//首次进入
showDialogtext("温馨提示", mContext.getResources().getString(R.string.tips_yinsizhengce_dialog),
"同意", "拒绝", "用户隐私协议", new OnDialogClick() {
@Override
public void onCancelClick() {
finish();
}
@Override
public void onConfirmClisk() {
//第一次进入App隐私弹窗是否显示
SharePreUtil.putBoolean(ConstantUtil.SHARE_PRE_NAME, mContext, ConstantUtil.FIRST_ENTER_APP_AGREEMENT_TIPS, false);
//用户是否同意了隐私政策
SharePreUtil.putBoolean(ConstantUtil.SHARE_PRE_NAME, mContext, ConstantUtil.PRIVACY_POLICY_AGREED, true);
MyApplication app = (MyApplication) getApplicationContext();
app.initializeUmengSDK();
goTo(mContext, GuideActivity.class, null);
finish();
}
@Override
public void onConfirmClisk(String content) {
}
@Override
public void onView1Click() {
Bundle bundle = new Bundle();
bundle.putInt("from_requse_code", WebviewUserAgreement.PRIVACY_CODE);
goToWihoutNoPresent(mContext, WebviewUserAgreement.class, bundle);
}
}, false, true);
} else {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(mContext, MainActivity.class);
startActivity(intent);
finish();
}
}, 2000);
}
}
@Override
public void onBackPressed() {
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
ActivityManager.removeAllActivity();
finish();
}
@Override
public MainPresenter createPresenter() {
return new MainPresenter(new MainImpl());
}
@Override
public int getLayoutResId(Bundle savedInstanceState) {
return 0;
}
@Override
public void showError(String message) {
}
@Override
public void logOut(BaseBean bean) {
}
@Override
public void getAppVersionSuccess(CheckVersionEntity bean) {
}
@Override
public void activationVipSuccess(BaseBean bean) {
}
@Override
public void getVersionCheck(CheckVersionEntity entity) {
}
@Override
public void getYunshiDataSuccess(BaseBean bean) {
}
@Override
public void getUserInfoSuccess(MineUserInfoBean bean) {
}
}