Java 如何在Android测验中实现计时器?
我正在进行Android测验。我想在Java 如何在Android测验中实现计时器?,java,android,timer,imageview,Java,Android,Timer,Imageview,我正在进行Android测验。我想在问题XML的ImageView中添加计时器,我想从欢迎XML的播放按钮中调用倒计时按钮。我只是在问题xml中通过在ImageView中添加这样一行来设置onClick 有问题的XML 在这段代码中,我刚刚编写了定时器的代码来调用Image并在timepractivity中实现代码。但当我点击播放按钮时,我的计时器并没有启动。我的播放按钮在不同的活动中工作。所以有人能帮助我如何在不同的XML中调用计时器吗 我的日志:- !ENTRY org.eclipse.ui
问题XML
的ImageView中添加计时器,我想从欢迎XML
的播放按钮中调用倒计时按钮。我只是在问题xml
中通过在ImageView中添加这样一行来设置onClick
有问题的XML
在这段代码中,我刚刚编写了定时器的代码来调用Image并在timepractivity中实现代码。但当我点击播放按钮时,我的计时器并没有启动。我的播放按钮在不同的活动中工作。所以有人能帮助我如何在不同的XML中调用计时器吗
我的日志:-
!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)
提前感谢您应该尝试以下代码
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();
}
注意:参数以毫秒为单位
要启动计时器,只需在任何按钮的单击事件中调用setTimer()
方法。我看不出计时器实现有任何错误
但是你有这个
text = (TextView) this.findViewById(R.id.button1);
<ImageView
android:id="@+id/button1"
你有这个吗
text = (TextView) this.findViewById(R.id.button1);
<ImageView
android:id="@+id/button1"
试试下面的方法。点击按钮,计时器启动
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);
编辑:
您的应用程序应该会因您发布的代码而崩溃。如果是这样,将stacktracepost张贴到你的question.xml
你有一个imageview,我看不到你在任何地方初始化imageview。您可以使用id按钮1
初始化文本视图。请确保您的视图已正确初始化。是的,首先我在那里添加了按钮,然后我用ImageView将其删除。或者我也可以更改其ID。如果您有ImageView,则在活动中将其初始化为iamgeview,ID在xml中提及。如果您有textview,则初始化textview textview。但是您有text.setText
,所以将imageview更改为textview,然后在活动中初始化textview。然后将文本设置为textview您所做的是错误的您有textview,按钮是difrerent xml,并且您正在单个活动中初始化它。your question.xml必须具有textview和play按钮。我在我的TimeActivity中实现了上述代码,并在我的xml中添加了一个Id为Timer的textview,并将其称为OnClick play按钮,但我无法启动Timer..:(@akashraj发布您的更新代码它工作正常毫无疑问您正在这样做wrong@akashraj检查“编辑”按钮,它工作正常。您可能做错了什么。甚至发布了快照。如果出现异常,请检查日志猫。@Raghunadan.我仍然陷于计时器活动中。它在我的项目中仍然不工作。当我在测试项目上单独运行它。我不知道如何继续。@akashraj发布更新的代码xml,如果出现异常,则发布崩溃的logcat详细信息以获得进一步帮助。如果不发布相关详细信息,则无法提供帮助further@akashraj,是否要在另一个活动中添加侦听器以获取启动计时器?详细说明。你的问题我不太清楚。@chitan基本上我有一个ImageView(在这里我必须调用我的计时器)问题XMl和Play按钮(在我的欢迎XMl中)。当我单击“播放”按钮时,我的测验开始,我也希望计时器开始。我还创建了一个TimePractivity。@chitan是的,我想在另一个活动中添加侦听器以启动计时器。创建一个侦听器界面,然后在另一个活动中注册它。当用户单击按钮时,启动该侦听器,以便注册的活动也得到通知。:)你能给我举个例子吗我非常感谢你。
<TextView
android:id="@+id/textView1"
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();
}
}
int seconds = (int) (milliseconds / 1000) % 60 ;
int minutes = (int) ((milliseconds / (1000*60)) % 60);
int hours = (int) ((milliseconds / (1000*60*60)) % 24);
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="35dp"
android:text="TextView" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/textView1"
android:layout_marginTop="68dp"
android:text="Button" />
</RelativeLayout>