如何在Android测验中实现计时器?
我正在进行Android测验。我想在ImageView In Question XML
添加计时器,我想从Play Welcome XML
按钮上调用CountDownTimer
。 我只是通过在ImageView中添加这样的行来设置Question xml
的onClick
在问题XML中
在欢迎xml中
然后我创建了TimerActivity
public class TimerActivity extends Activity implements OnClickListener { private Button startB; public TextView text; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.question); startB = (Button) this.findViewById(R.id.playBtn); startB.setOnClickListener((OnClickListener) this); text = (TextView) findViewById(R.id.textView1); } @Override public void onClick(View v) { new CountDownTimer(30000, 1000) { // adjust the milli seconds here public void onTick(long millisUntilFinished) { text.setText(""+String.format("%d min, %d sec", TimeUnit.MILLISECONDS.toMinutes( millisUntilFinished), TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)))); } public void onFinish() { text.setText("done!"); } }.start(); } }
在这段代码中,我刚刚编写了计时器代码来调用Image并在TimerActivity中实现代码。 但是当我单击播放按钮时,我的计时器无法启动。我的播放按钮在不同的Activity中工作。任何人都可以帮助我如何在不同的XML中调用Timer。
我的logCat: –
!ENTRY org.eclipse.ui 4 0 2013-09-02 17:19:38.741 !MESSAGE Unhandled event loop exception !STACK 0 java.lang.IllegalArgumentException: Widget has the wrong parent at org.eclipse.swt.SWT.error(SWT.java:4342) at org.eclipse.swt.SWT.error(SWT.java:4276) at org.eclipse.swt.SWT.error(SWT.java:4247) at org.eclipse.swt.widgets.Widget.error(Widget.java:468) at org.eclipse.swt.widgets.Control.setMenu(Control.java:3462) at com.android.ddmuilib.logcat.LogCatPanel$20.handleEvent(LogCatPanel.java:1042) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1062) at org.eclipse.swt.widgets.Widget.showMenu(Widget.java:1472) at org.eclipse.swt.widgets.Widget.wmContextMenu(Widget.java:1574) at org.eclipse.swt.widgets.Control.WM_CONTEXTMENU(Control.java:4673) at org.eclipse.swt.widgets.Table.WM_CONTEXTMENU(Table.java:5972) at org.eclipse.swt.widgets.Control.windowProc(Control.java:4532) at org.eclipse.swt.widgets.Table.windowProc(Table.java:5913) at org.eclipse.swt.widgets.Display.windowProc(Display.java:4989) at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method) at org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:2440) at org.eclipse.swt.widgets.Table.callWindowProc(Table.java:564) at org.eclipse.swt.widgets.Table.callWindowProc(Table.java:430) at org.eclipse.swt.widgets.Widget.wmRButtonUp(Widget.java:2395) at org.eclipse.swt.widgets.Control.WM_RBUTTONUP(Control.java:5134) at org.eclipse.swt.widgets.Control.windowProc(Control.java:4596) at org.eclipse.swt.widgets.Table.windowProc(Table.java:5913) at org.eclipse.swt.widgets.Display.windowProc(Display.java:4989) at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method) at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2546) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3756) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1053) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:942) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:86) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:588) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:543) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584) at org.eclipse.equinox.launcher.Main.run(Main.java:1438) at org.eclipse.equinox.launcher.Main.main(Main.java:1414)
提前致谢
我没有看到你的计时器实现有什么问题
但你有这个
text = (TextView) this.findViewById(R.id.button1);
你有这个
所以它应该是
和
text = (TextView) findViewById(R.id.textView1);
试试下面的内容。 点击按钮计时器启动。
public class MainActivity extends Activity implements OnClickListener { private Button startB; public TextView text; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); startB = (Button) this.findViewById(R.id.button1); startB.setOnClickListener((OnClickListener) this); text = (TextView) findViewById(R.id.textView1); } @Override public void onClick(View v) { new CountDownTimer(30000, 1000) { // adjust the milli seconds here public void onTick(long millisUntilFinished) { text.setText(""+String.format("%d min, %d sec", TimeUnit.MILLISECONDS.toMinutes( millisUntilFinished), TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)))); } public void onFinish() { text.setText("done!"); } }.start(); } }
检查此链接
对于低于1.5的Java版本或对于不完全支持TimeUnit类的系统,可以使用以下等式:
int seconds = (int) (milliseconds / 1000) % 60 ; int minutes = (int) ((milliseconds / (1000*60)) % 60); int hours = (int) ((milliseconds / (1000*60*60)) % 24);
编辑:
您应该尝试以下代码。
private void setTimer() { counterTimer = new CountDownTimer(finishTime * 1000, 1000) { public void onFinish() { //code to execute when time finished } public void onTick(long millisUntilFinished) { int seconds = (int) (millisUntilFinished / 1000); int minutes = seconds / 60; seconds = seconds % 60; if (seconds < 10) { txtTimer.setText("" + minutes + ":0" + seconds); } else { txtTimer.setText("" + minutes + ":" + seconds); } } }; counterTimer.start(); }
这里的examFinishTime
是一个很长的值
private long finishTime = 5;
注意:参数以毫秒为单位。
要启动计时器,只需在任何按钮的单击事件中调用setTimer()
方法即可。
- HttpURLConnection即使在setDoOutput(true)之后执行get请求,setRequestMethod(“POST”)setRequestProperty(“Content”
- NullPointerException在Android.os.Bundle上
- 动画后移动imageview(更新位置)
- Android Activity中的方法未定义错误
- NameValuePair,HttpParams,HttpConnection Params在登录app的服务器请求类上已弃用
- 拆分ssl认证处理:
- 适用于Android的Scala库
- 如何使用两个按钮实现多个datepickerfunction并保存选择的日期?
- java.text.ParseException:仅限某些设备上的无法解析的日期