Android实现钟表的布局和代码示例
时间: 2024-02-18 07:03:45 浏览: 21
Android实现钟表可以使用自定义View和Canvas来实现。以下是一个简单的示例布局和代码:
布局:
```xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.example.clockview.ClockView
android:id="@+id/clock_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
```
代码:
```java
public class ClockView extends View {
private final Paint mPaint = new Paint();
public ClockView(Context context) {
super(context);
init();
}
public ClockView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public ClockView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
mPaint.setColor(Color.BLACK);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(5f);
mPaint.setAntiAlias(true);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int width = getWidth();
int height = getHeight();
int radius = Math.min(width, height) / 2 - 10;
canvas.drawCircle(width / 2, height / 2, radius, mPaint);
for (int i = 1; i <= 12; i++) {
float x = (float)(width / 2 + radius * Math.sin(Math.toRadians(i * 30)));
float y = (float)(height / 2 - radius * Math.cos(Math.toRadians(i * 30)));
canvas.drawCircle(x, y, 10, mPaint);
}
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
drawHand(canvas, hour * 30 + minute / 2, radius / 2, 10, Color.BLACK);
drawHand(canvas, minute * 6, radius * 3 / 5, 5, Color.BLACK);
drawHand(canvas, second * 6, radius * 4 / 5, 2, Color.RED);
}
private void drawHand(Canvas canvas, int degree, int length, int width, int color) {
mPaint.setColor(color);
mPaint.setStrokeWidth(width);
canvas.drawLine(getWidth() / 2, getHeight() / 2,
(float)(getWidth() / 2 + length * Math.sin(Math.toRadians(degree))),
(float)(getHeight() / 2 - length * Math.cos(Math.toRadians(degree))), mPaint);
}
}
```
这个示例使用Canvas绘制钟表的外圆和刻度,然后使用Calendar获取当前时间,计算时针、分针和秒针的位置,最后使用Canvas绘制指针。