📜  Android模拟时钟和数字时钟示例(1)

📅  最后修改于: 2023-12-03 14:59:17.525000             🧑  作者: Mango

Android模拟时钟和数字时钟示例

简介

本示例演示了如何在Android应用中创建模拟时钟和数字时钟的UI界面和基本功能。模拟时钟提供了经典的模拟时钟外观和秒钟滴答声效,数字时钟则提供了数字显示和24小时制的功能。

实现步骤
  1. 创建模拟时钟和数字时钟的UI布局文件。可以使用LinearLayout或ConstraintLayout等布局容器实现。
<!-- 模拟时钟布局 -->
<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"/>
  1. 在应用的Activity中,使用Handler定时刷新UI界面,同时实现模拟时钟的秒钟滴答声效。
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和相关功能,加入闹钟和计时器等功能,可以提高应用的用户体验。