基于Java Swing的儀表盤實現

      網友投稿 734 2022-05-28

      原文:https://segmentfault.com/a/1190000007683729

      序言

      夠幾個月沒有更新了,博客還透露著春招焦慮的氣息。最近code確實不多,而且缺乏原創性的內容,當然,關鍵點還是在于,對于最近看的東西,看的比較雜,沒能夠有一個非常透徹的理解,input后沒有進行很好的內化,導致output如難產的嬰兒,遲遲無法落地。轉到正題,這次寫的儀表盤,繼承JComponent實現一個儀表空間。支持直線性,弧形,圓形。同時支持對于表盤的顏色,大小的一些自定義操作。難點在于對于表盤刻度的繪制。涉及到數學公式的轉化,將我們的刻度線進行繪制。

      實現思路

      初次想到實現一個儀表盤,有點畏懼心理,但是想到了之前創業公司實現的一個扇形的RecyclerView控件,感覺有很多可以參考的算法在里面,所以決定來嘗試下。逐層剖析,同時在網上看到了一個實現,大體上看了下其實現,代碼寫的非常爛,閱讀難度非常大,對于后期想在其寄出上造個輪子來說是比較困難的。平時開發中,很多輪都不能完全match我們的需求,因此需要我們具備自身拆輪能力,而作為一個造輪者,除了完成需求,應該盡可能的使輪具備更好的泛化能力。

      對于刻度盤的繪制,首先要知道的是,一個刻度盤包含哪些東西,哪些需要我們去繪制的,對刻度盤進行了一個拆分之后,然后逐個去繪制,此時就沒有這么難了。

      基于Java Swing的儀表盤實現

      刻度:刻度盤,首先要有的必然是刻度,如下圖中的所示,對于刻度,我們需要有長刻度和短刻度,長刻度也就是我們的大的單位。然后是其中的最小單位,也就是一個個的小刻度。

      文字標量:刻度盤中的文字標量,對于刻度盤,我們需要文字來準確直觀的描述,每一個刻度所度量的大小,因此,我們需要在刻度上,對于大小進行一個標注。

      指針:對于表示我們的當前值的大小,我們需要一個指針來指向我們的當前值,這個時候我們需要根據提供的數值的大小,繪制一個指針來表示當前的值,指向刻度盤上的當前位置。

      因此,我們可以得出,對于一個刻度盤的繪制,需要對于三個部分的繪制綜合得到。以繪制弧形的舉例。

      繪制弧形,首先是對于刻度的繪制,我們需要根據提供整個圓弧的角度和數值的范圍來將刻度盤進行分割,分割完成之后,對其進行繪制,這個時候,如何繪制呢?從什么地方開始繪制,畫刻度,無非是提供線的兩端,然后畫一條線,那么問題就是在于如何如何找到這條線的兩端的坐標,這個時候,需要我們運用一些數學知識,來進行計算,根據角度來計算。這個時候需要我們計算出起始角度,然后根據每當我們畫出一個刻度,就加上相應的角度值,最后得到每一個刻度所處的角度,然后根據余弦公式,表示當前的角度。

      double x1 = Math.cos(startAngle - num * major * dunit) * r + width / 2;

      double y1 = height - yOffset - Math.sin(startAngle - num * major * dunit) * r;

      double x2 = Math.cos(startAngle - num * major * dunit) * r * 0.75 + width / 2;

      double y2 = height - yOffset - Math.sin(startAngle - num * major * dunit) * r * 0.75;

      具體代碼的實現可以參考本人github開源代碼。

      實現效果

      線性刻度盤

      弧形刻度盤

      半圓中心刻度盤

      圓形刻度盤

      開源實現

      Github地址

      Java 華為開源鏡像站 Mirrors

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:7.磁盤基本概念
      下一篇:怎樣給一個磁盤文件排序?
      相關文章
      亚洲一级特黄特黄的大片| 亚洲精品美女久久久久| 亚洲色成人WWW永久在线观看| 亚洲国产精品美女| 亚洲视频小说图片| 91亚洲一区二区在线观看不卡| 亚洲成色WWW久久网站| 国产成人A亚洲精V品无码| 亚洲一区二区精品视频| 亚洲精品第一国产综合境外资源 | 亚洲综合激情九月婷婷| 久久精品国产亚洲av高清漫画 | 亚洲精品无码永久在线观看男男| 亚洲中文字幕无码中文字| 中国亚洲呦女专区| 亚洲精品久久无码| 日韩亚洲人成在线综合| 亚洲国产精品不卡毛片a在线| 亚洲国产一成久久精品国产成人综合| 亚洲av成人一区二区三区在线播放 | 最新国产精品亚洲| 亚洲乱亚洲乱妇24p| 大桥未久亚洲无av码在线| 国产精品久久亚洲一区二区| 亚洲不卡无码av中文字幕| 亚洲国产中文v高清在线观看| 久久精品国产亚洲Aⅴ香蕉| 亚洲色精品88色婷婷七月丁香| 亚洲精品国产字幕久久不卡| 久久精品视频亚洲| 亚洲韩国在线一卡二卡| 亚洲成a人片在线观看精品| 亚洲欧洲AV无码专区| 偷自拍亚洲视频在线观看99| 亚洲日本va午夜中文字幕久久| 亚洲精品无码久久一线| 91情国产l精品国产亚洲区| 亚洲性线免费观看视频成熟| 国产精品亚洲综合| 亚洲日产无码中文字幕| 亚洲精品第五页中文字幕|