Android 绘制计时器
2015-08-05 12:32
357 查看
用小米的手机,发现其实还可以,无意间点开小米的计时器,发现界面非常好看和实用。于是自己仿照着写一个,由于技术不好,代码整体结构上可能有点乱,但主要的实现功能和掌握知识点。
Android中绘制采用canvase绘图类,加上timer计时器和handler来更新UI,核心就这点东西,非常简单。废话不多说,先附上效果图。
MainActivity
最后说一些细节。在绘制的坐标问题上,我先是在activity布局加载完成之后,将绘制区域的宽度和高度获取到,根据这个数据来绘制,本来是想实现在不同手机屏幕实现自适应效果,后来发现。手机分辨率不一样的时候,还是没能实现,所以大家根据自己的需要改改坐标。至于怎么实现自适应屏幕,由于没有系统的学习过,现在还是没有解决好。我会努力的。还有就是小米自带计时器上有渲染的效果,就是指针转动时颜色会发生变化,这个用android自带的绘图渲染来写很麻烦。所以可能是用第三方包,这里我就不写了(试着写过,但是渲染效果很差,就删除了)。
大家有什么意见,欢迎随时交流。大神勿喷....
Android中绘制采用canvase绘图类,加上timer计时器和handler来更新UI,核心就这点东西,非常简单。废话不多说,先附上效果图。
package com.example.timer; import java.util.ArrayList; import java.util.List; import android.os.Bundle; import android.app.Activity; import android.view.View; import android.view.View.OnClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.LinearLayout; import android.widget.ListView; public class MainActivity extends Activity { private ListView listview; private Button btnStart, btnJici, btnStop; private LinearLayout lin, linView; MyCanvases myCanvases; List<String> list; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); list = new ArrayList<String>(); intview(); } /** * 获得控件关联,为按钮设置监听 */ private void intview() { linView = (LinearLayout) findViewById(R.id.main_view); listview = (ListView) findViewById(R.id.main_listview); btnStart = (Button) findViewById(R.id.main_button_start); btnStart.setOnClickListener(new MyOnClick()); btnJici = (Button) findViewById(R.id.main_button_jici); btnJici.setOnClickListener(new MyOnClick()); btnStop = (Button) findViewById(R.id.main_button_zanting); btnStop.setOnClickListener(new MyOnClick()); lin = (LinearLayout) findViewById(R.id.main_lin); } /** * 实现点击事件接口,用控件id来区分不同事件,将所有事件集中到一起处理。(个人比较喜欢这样写) * * @author * */ public class MyOnClick implements OnClickListener { public void onClick(View v) { switch (v.getId()) { case R.id.main_button_start: myCanvases.Start(); btnStart.setVisibility(View.GONE); lin.setVisibility(View.VISIBLE); break; case R.id.main_button_zanting: if (btnStop.getText().toString().equals("暂停")) { myCanvases.Stop(); btnStop.setText("继续"); btnJici.setText("重置"); } else { myCanvases.Start(); btnStop.setText("暂停"); btnJici.setText("记次"); } break; case R.id.main_button_jici: if (btnJici.getText().toString().equals("重置")) { myCanvases.setTime(); btnStart.setVisibility(View.VISIBLE); lin.setVisibility(View.GONE); btnStop.setText("暂停"); btnJici.setText("记次"); // 清空数据 list.clear(); // 清空listview listview.setAdapter(null); } else { // 添加数据 list.add(myCanvases.getTime()); String[] text = new String[list.size()]; for (int i = 0; i < list.size(); i++) { text[i] = "第" + (i + 1) + "次: " + list.get(i); } // 建立适配器 ArrayAdapter<String> adapter = new ArrayAdapter<String>( MainActivity.this, android.R.layout.simple_list_item_1, text); // 添加适配器 listview.setAdapter(adapter); // 将listview的焦点始终锁定在最后一行,很有用 listview.setSelection(adapter.getCount()); } default: break; } } } // 重写activit的onWindowFocusChanged方法,是为了在布局加载完成之后, // 才能获得到控件的大小和位置,将参数传递到绘图类 public void onWindowFocusChanged(boolean hasFocus) { if (hasFocus) { myCanvases = new MyCanvases(this, linView.getWidth(), linView.getHeight()); //将绘制的图像加载到对应的布局上显示 linView.addView(myCanvases); } } }
MainActivity
最后说一些细节。在绘制的坐标问题上,我先是在activity布局加载完成之后,将绘制区域的宽度和高度获取到,根据这个数据来绘制,本来是想实现在不同手机屏幕实现自适应效果,后来发现。手机分辨率不一样的时候,还是没能实现,所以大家根据自己的需要改改坐标。至于怎么实现自适应屏幕,由于没有系统的学习过,现在还是没有解决好。我会努力的。还有就是小米自带计时器上有渲染的效果,就是指针转动时颜色会发生变化,这个用android自带的绘图渲染来写很麻烦。所以可能是用第三方包,这里我就不写了(试着写过,但是渲染效果很差,就删除了)。
大家有什么意见,欢迎随时交流。大神勿喷....
相关文章推荐
- 界面布局(1)
- VS2015 VisualStudio Emulator for Android 模拟器目录
- 分享一些大牛的Android博客
- Android基础之结束所有Activity通用方法
- Android Studio的复制一行快捷键与Windows7屏幕旋转快捷键冲突
- Android开发中,那些让你觉得相见恨晚的方法、类或接口
- 菜鸟学Android第一天
- Android基础之使用inflater来实现动态加载布局
- Android SDK NDK API文档等下载地址
- Android开发笔记----简单的方法实现打电话和浏览网页
- SSH服务器与Android通信(2)--Android客户端接收数据
- 【Android应用开发技术:媒体开发】打印
- 【Android应用开发技术:动画开发】章节目录
- 【Android应用开发技术:应用组件】章节列表
- 【Android应用开发技术:应用调试】章节列表
- 【Android应用开发技术:文件读写】章节列表
- 【Android应用开发技术:图像处理】章节列表
- android主题切换
- 关于Android学习要问的一些问题
- Android NDK同时编译多个so文件