android自定义手表

news/2024/11/8 0:51:45/

1.效果图:

2.布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/btn_start"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="start" />.<Buttonandroid:id="@+id/btn_stop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="stop" /><ImageViewandroid:id="@+id/iv_clock"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:src="@mipmap/ic_launcher" />
</LinearLayout>

3.自定义view,显示

package com.example.administrator.testz;import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;import java.util.Calendar;/*** 优化方案:* 表盘课绘制一次* 在分线程中进行加载*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener {private Button btnStart, btnStop;private ImageView mClockImageView;Bitmap.Config config = Bitmap.Config.ARGB_8888;int width = 500;int height = 500;private Calendar mCalendar;private int mHour, mMinute, mSecond;private float mDegrees;private float length;private boolean mIsRunning;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btnStart = (Button) findViewById(R.id.btn_start);btnStop = (Button) findViewById(R.id.btn_stop);btnStop.setOnClickListener(this);btnStart.setOnClickListener(this);mClockImageView = (ImageView) findViewById(R.id.iv_clock);mClockImageView.setImageBitmap(drawClock());}/*** 画表盘*/private Bitmap drawClockFace() {Bitmap bm = Bitmap.createBitmap(width, height, config);Canvas canvas = new Canvas(bm);Paint paint = new Paint();paint.setAntiAlias(true);  //锯齿paint.setStyle(Paint.Style.STROKE); // 空心paint.setStrokeWidth(5);paint.setColor(Color.parseColor("#333333"));// 外层圆canvas.drawCircle(width / 2, height / 2, width / 2, paint);// 內层圆  --》圆心paint.setStyle(Paint.Style.FILL);canvas.drawCircle(width / 2, height / 2, 10, paint);// 循环画刻度(旋转画刻度)for (int i = 0; i < 12; i++) {if (i % 3 == 0) {paint.setStrokeWidth(10);canvas.drawLine(width / 2, 0, width / 2, 24, paint);canvas.rotate(30, width / 2, height / 2);} else {canvas.drawLine(width / 2, 0, width / 2, 10, paint);canvas.rotate(30, width / 2, height / 2);}}return bm;}private Bitmap drawClock() {Bitmap bm = drawClockFace();Canvas canvas = new Canvas(bm);Paint paint = new Paint();paint.setAntiAlias(true);paint.setColor(Color.parseColor("#333333"));mCalendar = Calendar.getInstance();mHour = mCalendar.get(Calendar.HOUR);mMinute = mCalendar.get(Calendar.MINUTE);mSecond = mCalendar.get(Calendar.SECOND);//画小时指针paint.setStrokeWidth(10);mDegrees = mHour * 30 + mMinute / 2;length = (width / 2) * 0.7f;canvas.save();canvas.rotate(mDegrees, width / 2, height / 2);canvas.drawLine(width / 2, height / 2, width / 2, height - (height / 2) - length, paint);canvas.restore();
//        canvas.rotate(360 - mDegrees, width / 2, height / 2);//画分钟指针paint.setStrokeWidth(4);mDegrees = mMinute * 6 + mSecond / 10;length = (width / 2) * 0.78f;canvas.save();canvas.rotate(mDegrees, width / 2, height / 2);canvas.drawLine(width / 2, height / 2, width / 2, height - (height / 2) - length, paint);canvas.restore();
//        canvas.rotate(360 - mDegrees, width / 2, height / 2);//画分钟指针paint.setStrokeWidth(2);mDegrees = mSecond * 6;length = (width / 2) * 0.92f;canvas.save();canvas.rotate(mDegrees, width / 2, height / 2);canvas.drawLine(width / 2, height / 2, width / 2, height - (height / 2) - length, paint);canvas.restore();return bm;}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_start:mIsRunning = true;new ClockTask().execute("");break;case R.id.btn_stop:mIsRunning = false;break;}}@Overrideprotected void onDestroy() {super.onDestroy();mIsRunning = false;}private class ClockTask extends AsyncTask<Object, Object, Object> {@Overrideprotected Object doInBackground(Object... objects) {while (mIsRunning) {publishProgress("");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}return null;}@Overrideprotected void onProgressUpdate(Object... values) {super.onProgressUpdate(values);mClockImageView.setImageBitmap(drawClock());}}}

点击运行就可以了,这样手机就可以当手表用了,真的神奇

end


http://www.ppmy.cn/news/211151.html

相关文章

android watch,android watch介绍

本文概述 在本文中&#xff0c;我们将描述连接到你的Android手机的特定设备(手表)的列表。 Android智能手表的类别为运动Tizen&#xff0c;Fitbit和Wear OS。 下面我们将介绍一些最新的Android手表的一些功能。每款手表均具有出色的设计&#xff0c;展示&#xff0c;健身潜力&a…

VBA中的循环代码大全

最近&#xff0c;我在自学VBA&#xff0c;有了之前的Python基础&#xff0c;感觉学起VBA也比较轻松。毕竟VBA和Python一样都是面向对象的编程语言。通过自学&#xff0c;我基本上掌握了VBA的循环方法&#xff0c;以下是我的简单笔记和大家一起分享。 一、循环填充单元格 通过…

管道通信详解

目录 一、进程通信原理 二、什么是管道 三、创建一个匿名管道 四、fork共享管道的原理 五、管道的特点 六、4中场景 七、命名管道 八、命名管道通信的原理 九、创建一个命名管道 十、上实例 一、进程通信原理 我们知道进程间相互独立&#xff0c;具有独立性。那么我们…

联想电脑开不了机,安装bios电池,正常关机然后就开不了机点不亮, 不按就电池关机可以再次开机(未解决)

环景&#xff1a; 电脑&#xff1a;联想天逸510pro-181kl 台式电脑 操作系统&#xff1a;Windows 10 专业版 64位 问题描述&#xff1a; 前一天正常关机&#xff0c;第二天开不了机了&#xff0c;测试安装bios电池&#xff0c;正常关机然后就开不了机点不亮&#xff0c; 不…

天玑1000plus和骁龙865哪个好

截止今日&#xff0c;天玑1000仍然不见踪影&#xff0c;但是升级版的天玑1000Plus由iQOOZ1首发&#xff0c;天玑800的升级版天玑820则由redmi首发 2020年下半年&#xff0c;这几款手机值得入手&#xff0c;懂手机的人会选最后一款!!! https://shouji.jd.com 天玑1000本来的定…

My computer——lenovo 天逸 F41图片一览

F41 外观图&#xff1a; F41内置摄相头摄相效果&#xff1a; 还是清晰的吧。。。 F41键盘&#xff1a; 键盘是经常被人们所忽略的一个部分。而恰恰就是这部分的设计才是使用者每天都要接触使用的设备。所以一款设计优秀的键盘对于笔记本来说&#xff0c;也是相当重要的。联想天…

天逸100装不了linux,天逸100怎么进bios 天逸100怎么重装系统【详细介绍】

联想电脑是国内市场上相对而言更为知名的品牌之一,和国外品牌相比较而言不仅具有性价比方面的优势,并且从用户的实际使用体验看来,更加适合国人的日常使用情况,并且在其他方面的表现也都十分出色,那么今天小编为大家带来的内容就是关于联想旗下一款经典产品——天逸100的相…

Lenovo 天逸F41 用户感想

用联想天逸F41有大半个学期了吧&#xff0c;对这款电脑&#xff0c;感触真的是不少啊&#xff0c;突然想在这里分享一下我的使用感想&#xff0c;不知道有没有人和我有一样的经历。。。 首先&#xff0c;介绍一下这款电脑的配置&#xff1a; 具体的配置请参阅&#xff1a;ht…