因此,当用户下载我的应用程序时,我希望初始 Activity 是出现应用程序标题的 FadedTextActivity
和另一个文本,然后我使用了 Timer
code> 使其在 9 秒后自动移动到下一个 Activity。唯一的问题是,现在,例如 FadedTextActivity 是我的启动器 Activity ,如果用户登录,它会跳过该 Activity 、注册和登录 Activity 。
唯一的问题是,即使用户已经登录,由于某种原因,计时器仍然会关闭,即使它甚至不需要通过该 Activity 来启动应用程序(因为用户已经登录) …有没有办法让计时器仅在 FadedTextActivity 时才会关闭,并且如果它直接进入 MainActivity,则计时器不应像当前那样刷新页面?
FadingTextActivity
public class FadingTextActivity extends AppCompatActivity {
FirebaseUser mFirebaseUser;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fading_text);
mFirebaseUser = FirebaseAuth.getInstance().getCurrentUser();
}
@Override
protected void onStart() {
super.onStart();
mFirebaseUser = FirebaseAuth.getInstance().getCurrentUser();
if (mFirebaseUser != null && mFirebaseUser.isEmailVerified()) {
startActivity(new Intent(FadingTextActivity.this, MainActivity.class));
finish();
} else {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
startActivity(new Intent(getApplicationContext(), StartActivity.class));
finish();
}
}, 9000);
FadingTextView fadingTextView = findViewById(R.id.fading_tv);
String[] fadingTv = {"Events", "What's happening in your world today?"};
fadingTextView.setTexts(fadingTv);
fadingTextView.setTimeout(4, TimeUnit.SECONDS);
}
}
}
最佳答案
阅读 source code 后我想出了几种方法来知道所有文本何时显示在 FadingTextView 中
事实证明,他们可以轻松地为此提供一个监听器,但他们没有,所以我们需要做一些技巧,这些技巧不是很好的做法,并使代码变得复杂,但如果您真的想开始并在之后进行下一个 Activity 这里显示的文字是我的解决方案
解决方案1
如您所知,可以通过将您设置的时间与您在 setTexts()
中传递的字符串数量相乘来计算显示所有文本所需的时间,您只需检查后台线程即可如果自程序启动以来已经过了该时间,如下所示
public class FadingTextActivity extends AppCompatActivity {
private int startTime = System.currentTimeinMillis()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fading_text);
FadingTextView fadingTextView = findViewById(R.id.fading_tv);
String[] fadingTv = {"Events", "What's happening in your world today?"};
fadingTextView.setTexts(fadingTv);
fadingTextView.setTimeout(3, TimeUnit.SECONDS);
new TimeChecker().execute(3000);
}
}
创建异步任务
//create an inner class asynctask to check if the desired time is elapsed
class TimeChecker extends AsynTask{
protected Void doInBackground(Integer... params) {
while(System.currentTimeMillis() < startTime + params[0]){}
// it will continue to iterate whenever this thread get a chance and
//only exit if time you passed is over
}
//below method will be called after above method means after the given time has
elapsed
protected void onPostExecute(Void result) {
// start activity here
}
}
虽然这不是一个非常好的和干净的解决方案,但我们没有太多选择
解决方案2
FadingTextView
中有一个 protected 方法,该方法在您给定的 timeout
时间后持续存在,因此,如果您在代码中创建 FadingTextView
可以轻松地覆盖该方法并在第二次调用该方法时启动您的 Activity ,但这也不是一个很好的解决方案
解决方案3
你可以拿他们的source分析它并引入一个回调,当所有文本都渲染一次时,它会让您监听,您将不需要任何依赖项,然后您可以将整个源代码包含在您的项目中,它只是两个类和一些 res 文件
抱歉,我知道我没有提供非常优雅的解决方案,但我们没有任何其他选择,至少我无法弄清楚,因为我们无法修改“FadingEdgeText”的源代码,而且它看起来不像这个类是为继承而设计的,也没有为客户端提供太多功能,所以我们需要这些技巧
祝你有美好的一天
关于java - 显示所有文本后切换到下一个 Activity ,而用户无需执行任何操作。显示所有文本后,屏幕自动更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62389624/