我有一个从60000毫秒开始的倒计时计时器,想要从颜色更改文本颜色。蓝色到彩色。红色一旦时间在和低于10000毫秒。我尝试了以下方法,但没有任何成功;试图设置TextSwitcher的TextColor并添加IF语句,该语句将根据int值timerState更改颜色...除了停止计时器并在毫秒内创建另一个计时器之外,我不知道如何让它工作。
我单击一个imageButton,它启动一个对话框片段(PauseFragment),并通过timerCDT调用我的倒计时程序上的cancel()。取消()。我遇到了一些null指针问题,因此if语句在我的代码中检查null,但是现在一旦PauseFragment取消,我的新计时器将从60000开始,而不是从上次停止的位置开始。我希望每次调用onTick()时,long-timerState=60000都能更新到millisuntillfinished,但我不确定哪里出错了!
因此,有人可以帮助我动态更改TextSwitcher文本颜色,并帮助我找出为什么我的倒计时没有按预期值启动。非常感谢您的帮助。
提前谢谢!
public class GameActivity extends FragmentActivity implements PauseFragment.FragmentCommunicator,{
public static long timerState = 60000;
public static boolean isTimerOn = false;
private String modeChoice = ModesActivity.mode;
private TextSwitcher timerTextSwitcher;
CountDownTimer timerCDT;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...more code
timerTextSwitcher = (TextSwitcher) findViewById(R.id.timerTextSwitcher);
timerTextSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
public View makeView() {
// Create a new TextView and set properties
TextView textView = new TextView(getApplicationContext());
textView.setLayoutParams(new TextSwitcher.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
textView.setTextSize(20);
textView.setTextColor(Color.BLUE);
if (timerState < 10001) {
textView.setTextColor(Color.RED);
}
return textView;
}
});
// Declare the animations and initialize them
Animation in = AnimationUtils.loadAnimation(this, android.R.anim.slide_in_left);
Animation out = AnimationUtils.loadAnimation(this, android.R.anim.slide_out_right);
// set the animation type to textSwitcher
timerTextSwitcher.setInAnimation(in);
timerTextSwitcher.setInAnimation(out);
}
timerCDT = new CountDownTimer(timerState, 1000) {
public void onTick(long millisUntilFinished) {
isTimerOn = true;
timerTextSwitcher.setText(String.valueOf(millisUntilFinished / 1000));
timerState = millisUntilFinished;
}
//TODO: assign highscores for players to beat
public void onFinish() {
timerTextSwitcher.post(new Runnable() {
@Override
public void run() {
createToast("GAME OVER!");
}
});
isTimerOn = false;
DialogFragment endDialog = new EndGameFragment();
endDialog.show(getSupportFragmentManager(), "EndGameDialogFragment");
}
};
timerCDT.start();
@Override
public void onPause() {
super.onPause();
Bundle args = new Bundle();
args.putInt(ARG_SCORE, scoreINT);
args.putLong(ARG_TIMER, timerState);
args.putString(GameActivity.ARG_MODE, modeChoice);
if (timerCDT != null) {
timerCDT.cancel();
}
else{
createToastExtended("onPause() - timerCDT is null; attempt to cancel");
}
}
//.!.other fun code here.!.
@Override
protected void onStop() {
super.onStop();
if (timerCDT != null) {
timerCDT.cancel();
}
else{
createToastExtended("onStop() - timerCDT is null; attempt to cancel");
}
}
//Player Response information
@Override
public void pauseFragmentResponse() {
if (timerCDT != null) {
timerCDT.start();
}
else{
createToastExtended("pauseFragmenResponse() - timerCDT is null; attempt to start");
}
}
public void pauseStartFrag(View view) {
DialogFragment dialog = new PauseFragment();
if (timerCDT != null) {
timerCDT.cancel();
}
else{
createToastExtended("pauseStartFrag() - timerCDT is null;attempt to cancel");
}
dialog.show(getSupportFragmentManager(), "PauseDialogFragment");
}
// Code for PauseFragment
//TODO: remove unuses imports on all files within project;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
public class PauseFragment extends DialogFragment {
public static boolean isPaused = false;
public FragmentCommunicator fComm;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
fComm = (FragmentCommunicator) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement FragmentCommunicator");
}
}
@Override
public void onDetach() {
super.onDetach();
fComm = null;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
isPaused = true;
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// Get the layout inflater
LayoutInflater inflater = getActivity().getLayoutInflater();
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog layout
builder.setView(inflater.inflate(R.layout.fragment_pause, null))
.setMessage(R.string.dialog_pause)
.setPositiveButton(R.string.action_main_menu, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Intent i4 = new Intent(getActivity(), StartActivity.class);
startActivity(i4);
}
})
.setNeutralButton(R.string.action_restart, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Intent i4 = new Intent(getActivity(), ModesActivity.class);
startActivity(i4); }
})
.setNegativeButton(R.string.action_resume, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
fComm.pauseFragmentResponse();
dismiss();
}
});
// Create the AlertDialog object and return it
return builder.create();
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
isPaused = false;
}
public interface FragmentCommunicator {
public void pauseFragmentResponse();
}
}
最后,Idk如果它有任何帮助,但是我也尝试在没有FragmentCommunicator接口的情况下启动倒计时计时器timerCDT,但是系统找不到计时器?如果有人能解释这件事发生的原因,我也会很感激的。
说真的,最后一件事,如果计时器是用于游戏的,并且需要经常停止和更新,那么最好使用CountDownTimer、TimerTask、一个实现Runnable的新线程、一个处理程序还是其他类型的?我都试过了,但当我向应用程序添加组件和功能时,我需要越来越多的灵活性来改变时间,不太确定我是否走上了正确的道路。希望这篇文章不要太含糊。请让我知道,如果我需要分为多个职位或东西。。。
一如既往地谢谢你!
t1, t2;
textSwitcher = (TextSwitcher) findViewById(R.id.textView99);
textSwitcher.setInAnimation(this, R.anim.slide_in_right);
textSwitcher.setOutAnimation(this, R.anim.slide_out_left);
t1 = new TextView(this);
t2 = new TextView(this);
t1.setTextSize(20);
t2.setTextSize(20);
textSwitcher.addView(t1);
textSwitcher.addView(t2);
这个线程帮助我更容易地解决我的问题:
https://groups.google.com/forum/#!Android开发者jdlUp_RlP2w
您可以在textSwitcher中控制TextView,如下所示:
TextView t1 = (TextView) mSwitcher.getChildAt(0);
TextView t2 = (TextView) mSwitcher.getChildAt(1);
然后根据代码逻辑设置所需的任何颜色。
刚刚在开发者网站上看了一下http://developer.android.com/reference/android/os/CountDownTimer.html看起来您可能应该将if语句放在onTick方法中,所以对于每个勾号,您都要进行检查。
编辑
好的,这对我来说非常合适
private TextSwitcher TextSw;
private TextView TextSwTextView;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(com.game.test.R.layout.sample);
TextSw = (TextSwitcher) findViewById(R.id.TextSwitchView);
TextSw.setFactory(new ViewSwitcher.ViewFactory()
{
public View makeView()
{
// Create a new TextView and set properties
TextView textView = new TextView(getApplicationContext());
textView.setLayoutParams(new TextSwitcher.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
textView.setTextSize(20);
textView.setTextColor(Color.BLUE);
return textView;
}
});
mtimer = new CountDownTimer(60000, 1000)
{
public void onTick(long millisUntilFinished)
{
TextSwTextView = (TextView) TextSw.getChildAt(0);
if(millisUntilFinished < 10001)
TextSwTextView.setTextColor(Color.RED);
TextSwTextView.setText("seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish()
{
TextSwTextView.setText("done!");
}
}.start();
}
上面是你的一个简单版本,当计时器达到1000时,显示计时器的文本将变为红色。你应该能够把这个融入你的生活。
但是这里你要做的主要事情是在onTick方法中检查计时器还有多少剩余,并在这里更改文本颜色,见上文
问题内容: 我有一个引导网站,当屏幕尺寸小于992px时,会添加Hamburger切换器。代码如下: 可以更改汉堡切换按钮的颜色吗? 问题答案: Bootstrap 4中的(汉堡包)使用SVG 。切换器图标图像有2个“版本”。一个用于浅色导航栏,另一个用于深色导航栏… 使用了较深的背景光/白色toggler 使用上较亮的背景黑色/灰色toggler 因此,如果要将切换器图像的颜色更改为其他颜色,可
本文向大家介绍Android TextSwitcher文本切换器和ViewFlipper使用详解,包括了Android TextSwitcher文本切换器和ViewFlipper使用详解的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享了Android TextSwitcher文本切换器的使用,供大家参考,具体内容如下 1.TextSwitcher 使用: 应用分为三步: 1.得到 Tex
我目前已经将JavaFX代码设置为在蓝色和红色之间切换。当程序运行时,一个带有文本“更改为红色”的按钮以蓝色文本出现。如果我点击这个按钮,它就会变成用红色文本写的“更改为蓝色”。如果我再次单击它,循环就会重新开始。我想做的是应用相同的图案,但使用四种颜色。例如,我希望它以: “变绿”,用红色文字书写。 然后在咔嚓一声之后。 “变紫”,用绿色文字书写。 有人能帮我把这个代码改成四种颜色吗?
update to revision:更新到指定版本。
问题内容: 故事:我拥有的其中一个应用程序可以在python 2.4上工作,而另一个可以在2.6上工作。我试图将python2.4链接到python,并且在ubuntu麻烦时事情开始崩溃。现在我正在下载2.4的每个依赖项,并使用python2.4 setup.py install进行安装。依赖性似乎是无限的。 问题1:我将如何告诉任何要使用版本的框架,例如pf python,如day django
我已经尝试了android widget开关事件侦听器的答案中的代码,但帖子没有提到我试图使用它时遇到的错误。 在建议代码的第二行: 此错误触发 CompoundButton类型中的方法setOnCheckedChangeListener(CompoundButton. OnCheckedChangeListener)不适用于参数(new OnCheckedChangedListener(){})