📅  最后修改于: 2023-12-03 14:59:17.525000             🧑  作者: Mango
本示例演示了如何在Android应用中创建模拟时钟和数字时钟的UI界面和基本功能。模拟时钟提供了经典的模拟时钟外观和秒钟滴答声效,数字时钟则提供了数字显示和24小时制的功能。
<!-- 模拟时钟布局 -->
<ImageView
android:id="@+id/clock_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/clock"/>
<TextView
android:id="@+id/hour_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textStyle="bold"
android:text="00"/>
<TextView
android:id="@+id/minute_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textStyle="bold"
android:text="00"/>
<TextView
android:id="@+id/second_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="15sp"
android:textStyle="bold"
android:text="00"/>
<!-- 数字时钟布局 -->
<TextView
android:id="@+id/time_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="50sp"
android:textStyle="bold"
android:text="00:00:00"/>
public class MainActivity extends AppCompatActivity {
// 声明模拟时钟UI组件
private ImageView mClockImage;
private TextView mHourText;
private TextView mMinuteText;
private TextView mSecondText;
// 声明数字时钟UI组件
private TextView mTimeText;
// 声明Handler
private Handler mHandler = new Handler(Looper.getMainLooper());
// 实现模拟时钟的秒钟滴答声效
private MediaPlayer mTickPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取模拟时钟UI组件
mClockImage = findViewById(R.id.clock_image);
mHourText = findViewById(R.id.hour_text);
mMinuteText = findViewById(R.id.minute_text);
mSecondText = findViewById(R.id.second_text);
// 获取数字时钟UI组件
mTimeText = findViewById(R.id.time_text);
// 加载秒钟滴答声效
mTickPlayer = MediaPlayer.create(this, R.raw.tick);
// 使用Handler定时刷新UI界面
mHandler.post(new Runnable() {
@Override
public void run() {
// 刷新模拟时钟
updateClock();
// 刷新数字时钟
updateTime();
// 延迟1秒钟再次运行
mHandler.postDelayed(this, 1000);
}
});
}
// 刷新模拟时钟界面和秒钟滴答声效
private void updateClock() {
Calendar now = Calendar.getInstance();
// 计算时针、分针和秒针的角度
int hour = now.get(Calendar.HOUR);
int minute = now.get(Calendar.MINUTE);
int second = now.get(Calendar.SECOND);
float hour_angle = (hour + minute / 60f) * 30f;
float minute_angle = minute * 6f;
float second_angle = second * 6f;
// 旋转时针、分针和秒针
mHourText.setRotation(hour_angle);
mMinuteText.setRotation(minute_angle);
mSecondText.setRotation(second_angle);
mClockImage.setRotation(second_angle - 90);
// 播放秒钟滴答声效
if (second == 0) {
mTickPlayer.start();
}
}
// 刷新数字时钟界面
private void updateTime() {
Calendar now = Calendar.getInstance();
// 格式化时间格式
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss", Locale.US);
formatter.setTimeZone(TimeZone.getDefault());
String time_str = formatter.format(now.getTime());
// 显示时间
mTimeText.setText(time_str);
}
}
本示例演示了如何在Android应用中创建模拟时钟和数字时钟的UI界面和基本功能。通过定时刷新UI界面和实现秒钟滴答声效,可以让模拟时钟更加真实,而数字时钟则提供了数字显示和24小时制的功能。除了本示例,还可以根据需要自定义时钟UI和相关功能,加入闹钟和计时器等功能,可以提高应用的用户体验。