启动图功能开发与封装

    技术2022-07-11  100

    前言

    启动图通常有两种样式。 第一种,App首次启动时可滑动的多张宣传图。 第二种,App每次启动时带有倒计时的单张宣传图。

    1. public class LauncherDelegate

    类LauncherDelegate负责判断登录状态、初始化计时器、加载相关布局。 若用户未登录,跳转到类LauncherScrollDelegate的实例。 若用户已登录,则初始化计时器、加载相关布局。

    package com.qilu.ec.launcher; import android.app.Activity; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.widget.AppCompatTextView; import android.view.View; import com.qilu.core.app.AccountManager; import com.qilu.core.app.IUserChecker; import com.qilu.core.delegates.QiluDelegate; import com.qilu.core.ec.R; import com.qilu.core.util.storage.QiluPreference; import com.qilu.core.util.timer.BaseTimerTask; import com.qilu.core.util.timer.ITimerListener; import com.qilu.ui.launcher.ILauncherListener; import com.qilu.ui.launcher.OnLauncherFinishTag; import com.qilu.ui.launcher.ScrollLauncherTag; import java.text.MessageFormat; import java.util.Timer; public class LauncherDelegate extends QiluDelegate implements ITimerListener { private AppCompatTextView mTvTimer = null; private Timer mTimer = null; private int mCount = 5; private ILauncherListener mILauncherListener = null; private void onClickTimerView() { if (mTimer != null) { mTimer.cancel(); mTimer = null; checkIsShowScroll(); } } private void initTimer() { mTimer = new Timer(); final BaseTimerTask task = new BaseTimerTask(this); mTimer.schedule(task, 0, 1000); } @Override public void onAttach(Activity activity) { super.onAttach(activity); if (activity instanceof ILauncherListener) { mILauncherListener = (ILauncherListener) activity; } } @Override public Object setLayout() { return R.layout.delegate_launcher; } @Override public void onBindView(@Nullable Bundle savedInstanceState, @NonNull View rootView) { initTimer(); mTvTimer = $(R.id.tv_launcher_timer); $(R.id.tv_launcher_timer).setOnClickListener(view -> onClickTimerView()); } private void checkIsShowScroll() { if (!QiluPreference.getAppFlag(ScrollLauncherTag.HAS_FIRST_LAUNCHER_APP.name())) { getSupportDelegate().startWithPop(new LauncherScrollDelegate()); } else { //检查用户是否登录了APP AccountManager.checkAccount(new IUserChecker() { @Override public void onSignIn() { if (mILauncherListener != null) { mILauncherListener.onLauncherFinish(OnLauncherFinishTag.SIGNED); } } @Override public void onNotSignIn() { if (mILauncherListener != null) { mILauncherListener.onLauncherFinish(OnLauncherFinishTag.NOT_SIGNED); } } }); } } @Override public void onTimer() { getProxyActivity().runOnUiThread(() -> { if (mTvTimer != null) { mTvTimer.setText(MessageFormat.format("跳过\n{0}s", mCount)); mCount--; if (mCount < 0) { if (mTimer != null) { mTimer.cancel(); mTimer = null; checkIsShowScroll(); } } } }); } }

    2. public class LauncherScrollDelegate

    类LauncherScrollDelegate完成有关可滑动启动图的相关逻辑。

    package com.qilu.ec.launcher; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.View; import com.qilu.core.app.AccountManager; import com.qilu.core.app.IUserChecker; import com.qilu.core.delegates.QiluDelegate; import com.qilu.core.ec.R; import com.qilu.core.util.storage.QiluPreference; import com.qilu.ui.launcher.ILauncherListener; import com.qilu.ui.launcher.LauncherHolderCreator; import com.qilu.ui.launcher.OnLauncherFinishTag; import com.qilu.ui.launcher.ScrollLauncherTag; import android.content.Context; import com.bigkoo.convenientbanner.ConvenientBanner; import com.bigkoo.convenientbanner.listener.OnItemClickListener; import java.util.ArrayList; public class LauncherScrollDelegate extends QiluDelegate implements OnItemClickListener { private ConvenientBanner<Integer> mConvenientBanner = null; private final ArrayList<Integer> INTEGERS = new ArrayList<>(); private ILauncherListener mILauncherListener = null; private void initBanner() { INTEGERS.add(R.mipmap.launcher_01); INTEGERS.add(R.mipmap.launcher_02); INTEGERS.add(R.mipmap.launcher_03); INTEGERS.add(R.mipmap.launcher_04); INTEGERS.add(R.mipmap.launcher_05); mConvenientBanner .setPages(new LauncherHolderCreator(), INTEGERS) .setPageIndicator(new int[]{R.drawable.dot_normal, R.drawable.dot_focus}) .setPageIndicatorAlign(ConvenientBanner.PageIndicatorAlign.CENTER_HORIZONTAL) .setOnItemClickListener(this) .setCanLoop(false); } @Override public void onAttach(Context context) { super.onAttach(context); if (context instanceof ILauncherListener) { mILauncherListener = (ILauncherListener) context; } } @Override public Object setLayout() { mConvenientBanner = new ConvenientBanner<>(getContext()); return mConvenientBanner; } @Override public void onBindView(@Nullable Bundle savedInstanceState, @NonNull View rootView) { initBanner(); } @Override public void onItemClick(int position) { //如果点击的是最后一个 if (position == INTEGERS.size() - 1) { QiluPreference.setAppFlag(ScrollLauncherTag.HAS_FIRST_LAUNCHER_APP.name(), true); //检查用户是否已经登录 AccountManager.checkAccount(new IUserChecker() { @Override public void onSignIn() { if (mILauncherListener != null) { mILauncherListener.onLauncherFinish(OnLauncherFinishTag.SIGNED); } } @Override public void onNotSignIn() { if (mILauncherListener != null) { mILauncherListener.onLauncherFinish(OnLauncherFinishTag.NOT_SIGNED); } } }); } } }
    Processed: 0.012, SQL: 9