android开发分享Android实现APP秒表功能实例为大家分享了android实现app秒表功能的具体代码,供大家参考,具体内容如下
上述就是android开发分享Android实现APP秒表功能的全部内容,如果对大家有所用处且需要了解更多关于Android学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)
这几天一直在看安卓,也正好赶上老师布置的作业,所以就做了一个秒表。自己参考了一下别人的图标,有了一些灵感所以顺便也设计了一下界面。下面先贴一下秒表的界面:
打开秒表后的第一个界面
点击开始计时,开始键变为暂停,记录和停止开始变实:
点击记录:
记录满了之后自动上移,通过滑动可以查看前面的:
点击暂停:
停止:
重新开始和记录:
双击返回键退出:
下面贴出activity的代码:
package com.example.stopwatch; import java.util.timer; import java.util.timertask; import android.r.bool; import android.app.activity; import android.app.alertdialog; import android.app.alertdialog.builder; import android.app.dialog; import android.content.dialoginterface; import android.content.intent; import android.content.res.assetmanager; import android.content.res.colorstatelist; import android.graphics.color; import android.graphics.typeface; import android.graphics.drawable.drawable; import android.os.bundle; import android.os.handler; import android.os.message; import android.text.html; import android.view.gravity; import android.view.keyevent; import android.view.menu; import android.view.view; import android.view.view.onclicklistener; import android.widget.button; import android.widget.imageview; import android.widget.linearlayout; import android.widget.scrollview; import android.widget.textview; import android.widget.toast; public class mainactivity extends activity { private boolean mstart = false; private long mstarttime; private boolean misrecorded; private linearlayout linearlayout; private int recordtimes; private long currenttime; private long lasttime = 0; private long tmptime; private boolean isexit = false; //更新显示时间的关键 private handler mhandler = new handler() { public void handlemessage(message msg) { switch (msg.what) { case 1: if (mstart) { updatetime(); mhandler.sendemptymessage(1); } break; case 0: break; default: break; } } }; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); textview textview1 = (textview) findviewbyid(r.id.textview1); textview textview2 = (textview) findviewbyid(r.id.textview2); //修改时间的字体 assetmanager mgr=getassets();//得到assetmanager typeface tf=typeface.createfromasset(mgr, "fonts/lanting.ttf");//根据路径得到typeface textview1.settypeface(tf); textview2.settypeface(tf); final button button_start = (button) findviewbyid(r.id.button_start); final button button_record = (button) findviewbyid(r.id.button_record); final button button_stop = (button) findviewbyid(r.id.button_stop); button_start.settext("开始"); //监听开始按钮 button_start.setonclicklistener(new onclicklistener(){ public void onclick(view v) { if(button_start.gettext() == "开始") { mstart = true; mstarttime = system.currenttimemillis(); button_start.settext("暂停"); button_record.setbackgroundresource(r.drawable.button_record_full); button_stop.setbackgroundresource(r.drawable.button_stop_full); lasttime = 0; recordtimes = 0; linearlayout = (linearlayout) findviewbyid(r.id.linearlayout1); linearlayout.removeallviewsinlayout(); mhandler.sendemptymessage(1); } else if(button_start.gettext() == "暂停"){ mstart = false; tmptime = system.currenttimemillis(); button_start.settext("继续"); button_record.setbackgroundresource(r.drawable.button_record_half); mhandler.sendemptymessage(0); } else { mstart = true; long tmp = system.currenttimemillis() - tmptime; mstarttime = mstarttime + tmp; button_start.settext("暂停"); button_record.setbackgroundresource(r.drawable.button_record_full); mhandler.sendemptymessage(1); } } }); //监听停止按钮 button_stop.setonclicklistener(new onclicklistener() { public void onclick(view arg0) { // todo auto-generated method stub if(button_start.gettext() != "开始"){ mstart = false; button_start.settext("开始"); button_stop.setbackgroundresource(r.drawable.button_stop_half); button_record.setbackgroundresource(r.drawable.button_record_half); textview textview1 = (textview) findviewbyid(r.id.textview1); textview textview2 = (textview) findviewbyid(r.id.textview2); textview1.settext("00:00:00"); textview2.settext("00"); } } }); //监听记录按钮 button_record.setonclicklistener(new onclicklistener() { public void onclick(view arg0) { // todo auto-generated method stub if(button_start.gettext() == "暂停"){ misrecorded = true; mhandler.sendemptymessage(1); } } }); } //更新显示时间和显示记录的时间 private void updatetime() { textview textview1 = (textview) findviewbyid(r.id.textview1); textview textview2 = (textview) findviewbyid(r.id.textview2); currenttime = system.currenttimemillis(); long atime = currenttime - mstarttime; stringbuilder[] sb1 = new stringbuilder[2]; sb1[0] = new stringbuilder(); sb1[1] = new stringbuilder(); sb1 = gettimeformat(atime); string str; textview1.settext(sb1[0]); textview2.settext(sb1[1]); if(misrecorded) { recordtimes++; string rec; long btime; if (recordtimes == 1) { btime = atime; } else { btime = currenttime - lasttime; } stringbuilder[] sb2 = new stringbuilder[2]; sb2[0] = new stringbuilder(); sb2[1] = new stringbuilder(); sb2 = gettimeformat(btime); if(recordtimes < 10) { rec = '0' + string.valueof(recordtimes); } else { rec = string.valueof(recordtimes); } str = "<font color='orange'>" + rec + "</font>" + " <small>" + sb2[0].tostring() +"." + sb2[1].tostring() + "</small>" + " "; str += "<b>" + sb1[0].tostring() + ".<small>" + sb1[1].tostring() + "</small>" + "</b>"; charsequence charsequence = html.fromhtml(str); textview text1 = new textview(this); text1.settext(charsequence); text1.settextsize(23); text1.settextcolor(color.white); text1.setgravity(gravity.center); assetmanager mgr=getassets();//得到assetmanager typeface tf=typeface.createfromasset(mgr, "fonts/lanting.ttf");//根据路径得到typeface text1.settypeface(tf); textview text2 = new textview(this); text2.settext(" "); text2.settextsize(10); linearlayout.addview(text2); linearlayout.addview(text1); final scrollview scrollview = (scrollview) findviewbyid(r.id.scrollview1); runnable mscrolltobottom = new runnable() { @override public void run() { int off = linearlayout.getmeasuredheight() - scrollview.getheight(); if (off > 0) { scrollview.scrollto(0, off); } } }; mhandler.post(mscrolltobottom); misrecorded =false; lasttime = currenttime; } } //把毫秒转为要显示的格式 public stringbuilder[] gettimeformat(long time) { long tmp = time; time = time / 1000; int second = (int) (time % 60); int minute = (int) (time / 60) % 60; int hour = (int) (time / 3600); int minsecond = (int) (tmp / 10 % 100); stringbuilder[] sb = new stringbuilder[2]; sb[0] = new stringbuilder(); sb[1] = new stringbuilder(); if(hour < 10) { sb[0].append('0'); sb[0].append(string.valueof(hour)); } else { sb[0].append(string.valueof(hour)); } sb[0].append(':'); if(minute < 10) { sb[0].append('0'); sb[0].append(string.valueof(minute)); } else { sb[0].append(string.valueof(minute)); } sb[0].append(':'); if(second < 10) { sb[0].append('0'); sb[0].append(string.valueof(second)); } else { sb[0].append(string.valueof(second)); } if(minsecond < 10) { sb[1].append('0'); sb[1].append(minsecond); } else { sb[1].append(minsecond); } return sb; } //监听返回键,实现点击返回键时弹出对话,连续两次点击退出 @override public boolean onkeydown(int keycode, android.view.keyevent event) { if (keycode == keyevent.keycode_back && event.getrepeatcount() == 0) { toast(); return false; } else if (keycode == keyevent.keycode_back && event.getrepeatcount() == 1) { mainactivity.this.finish(); } return false; }; /*protected void gialog() { // todo auto-generated method stub alertdialog.builder builder = new builder(mainactivity.this); builder.settitle("提示"); builder.setmessage("确定要退出吗?"); builder.setpositivebutton("确认", new android.content.dialoginterface.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { dialog.dismiss(); mainactivity.this.finish(); } }); builder.setnegativebutton("取消", new android.content.dialoginterface.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { dialog.dismiss(); } }); builder.create().show(); }*/ protected void toast() { timer texit = null; if (isexit == false) { isexit = true; // 准备退出 toast texttoast = toast.maketext(this, "小样!想退出?!", toast.length_long); texttoast.show(); texit = new timer(); texit.schedule(new timertask() { @override public void run() { isexit = false; // 取消退出 } }, 2000); // 如果2秒钟内没有按下返回键,则启动定时器取消掉刚才执行的任务 } else { finish(); system.exit(0); } } @override public boolean oncreateoptionsmenu(menu menu) { // inflate the menu; this adds items to the action bar if it is present. getmenuinflater().inflate(r.menu.activity_main, menu); return true; } }
布局文件的代码:
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <imageview android:id="@+id/imageview1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_alignparentleft="true" android:src="@drawable/backguand_new" android:scaletype="fitcenter"/> <button android:id="@+id/button_start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentbottom="true" android:layout_centerhorizontal="true" android:layout_marginbottom="12dp" android:text="开始" android:textcolor="#ffffff" android:background="@drawable/button_start_full"/> <button android:id="@+id/button_stop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignbaseline="@+id/button_start" android:layout_alignbottom="@+id/button_start" android:layout_marginleft="29dp" android:layout_torightof="@+id/button_start" android:background="@drawable/button_stop_half" android:text="停止" android:textcolor="#ffffff" /> <button android:id="@+id/button_record" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignbaseline="@+id/button_start" android:layout_alignbottom="@+id/button_start" android:layout_marginright="28dp" android:layout_toleftof="@+id/button_start" android:background="@drawable/button_record_half" android:text="记录" android:textcolor="#ffffff" /> <imageview android:id="@+id/imageview2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/button_start" android:layout_centerhorizontal="true" android:layout_marginbottom="20dp" android:src="@drawable/showrecord_new" /> <scrollview android:id="@+id/scrollview1" android:layout_width="wrap_content" android:layout_height="340dp" android:layout_alignleft="@+id/imageview2" android:layout_alignright="@+id/imageview2" android:layout_aligntop="@+id/imageview2" android:scrollbars="none"> <linearlayout android:id="@+id/linearlayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > </linearlayout> </scrollview> <textview android:id="@+id/textview2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignbaseline="@+id/textview1" android:layout_alignbottom="@+id/textview1" android:layout_torightof="@+id/textview1" android:text="00" android:textcolor="#ffffff" android:textsize="40dp"/> <textview android:id="@+id/textview1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/imageview2" android:layout_marginbottom="5dp" android:layout_alignleft="@+id/imageview2" android:text="00:00:00" android:textappearance="?android:attr/textappearancelarge" android:textcolor="#ffffff" android:textsize="60dp" /> </relativelayout>
以上就是android开发分享Android实现APP秒表功能的全部内容,希望对大家的学习有所帮助,也希望大家多多支持<计算机技术网>。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。
如若转载,请注明出处:https://www.ctvol.com/addevelopment/1239384.html