摘要:指針對于表示我們的當前值的大小,我們需要一個指針來指向我們的當前值,這個時候我們需要根據提供的數值的大小,繪制一個指針來表示當前的值,指向刻度盤上的當前位置。實現效果線性刻度盤弧形刻度盤半圓中心刻度盤圓形刻度盤開源實現地址
序言
夠幾個月沒有更新了,博客還透露著春招焦慮的氣息。最近code確實不多,而且缺乏原創性的內容,當然,關鍵點還是在于,對于最近看的東西,看的比較雜,沒能夠有一個非常透徹的理解,input后沒有進行很好的內化,導致output如難產的嬰兒,遲遲無法落地。轉到正題,這次寫的儀表盤,繼承JComponent實現一個儀表空間。支持直線性,弧形,圓形。同時支持對于表盤的顏色,大小的一些自定義操作。難點在于對于表盤刻度的繪制。涉及到數學公式的轉化,將我們的刻度線進行繪制。
實現思路初次想到實現一個儀表盤,有點畏懼心理,但是想到了之前創業公司實現的一個扇形的RecyclerView控件,感覺有很多可以參考的算法在里面,所以決定來嘗試下。逐層剖析,同時在網上看到了一個實現,大體上看了下其實現,代碼寫的非常爛,閱讀難度非常大,對于后期想在其寄出上造個輪子來說是比較困難的。平時開發中,很多輪都不能完全match我們的需求,因此需要我們具備自身拆輪能力,而作為一個造輪者,除了完成需求,應該盡可能的使輪具備更好的泛化能力。
對于刻度盤的繪制,首先要知道的是,一個刻度盤包含哪些東西,哪些需要我們去繪制的,對刻度盤進行了一個拆分之后,然后逐個去繪制,此時就沒有這么難了。
刻度:刻度盤,首先要有的必然是刻度,如下圖中的所示,對于刻度,我們需要有長刻度和短刻度,長刻度也就是我們的大的單位。然后是其中的最小單位,也就是一個個的小刻度。
文字標量:刻度盤中的文字標量,對于刻度盤,我們需要文字來準確直觀的描述,每一個刻度所度量的大小,因此,我們需要在刻度上,對于大小進行一個標注。
指針:對于表示我們的當前值的大小,我們需要一個指針來指向我們的當前值,這個時候我們需要根據提供的數值的大小,繪制一個指針來表示當前的值,指向刻度盤上的當前位置。
因此,我們可以得出,對于一個刻度盤的繪制,需要對于三個部分的繪制綜合得到。以繪制弧形的舉例。
繪制弧形,首先是對于刻度的繪制,我們需要根據提供整個圓弧的角度和數值的范圍來將刻度盤進行分割,分割完成之后,對其進行繪制,這個時候,如何繪制呢?從什么地方開始繪制,畫刻度,無非是提供線的兩端,然后畫一條線,那么問題就是在于如何如何找到這條線的兩端的坐標,這個時候,需要我們運用一些數學知識,來進行計算,根據角度來計算。這個時候需要我們計算出起始角度,然后根據每當我們畫出一個刻度,就加上相應的角度值,最后得到每一個刻度所處的角度,然后根據余弦公式,表示當前的角度。
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地址
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66300.html
摘要:包括以下級別部署用戶界面工具包集成庫其他基礎庫和基礎庫虛擬機由以下級別組成除了的用戶界面工具包集成庫其他基礎庫和基礎庫配置文件由以下級別組成集成庫其他基礎庫和基礎庫 Java概念圖將Java組件技術分類,下面列出了這些層次,從上到下,以及每個層次都包含的技術,屬于較低水平的技術可以作為更高水平的一部分的基礎。 Java語言 Tools & Tool APIs java javac...
摘要:而與其他工具相比比如可使用來進行頁面繪制。對于參數可以使用基本類型來表示。如下所示實際上其原理就是使用中的來實現類似的還有。當然對于復雜的情況建議還是使用之類或其他商業工具完成。 原文地址: http://blog.52sox.com/Java-us... 不得不說Swing是Java中GUI編程中1個不錯的包,但是手動編寫Swing是1個很繁瑣的事情。而與其他GUI工具相比,比如Q...
摘要:事件對象攜帶了動作發生時的相關信息,比如通過事件對象獲取按鈕的字符串,通過字符串判斷后執行不同的代碼。使用監聽器的步驟自己創建一個類使用這個類創建一個對象,用按鈕對象的添加監聽器方法添加這個對象。 ...
摘要:介紹是一個輕量級組件,它允許編輯單行文本。把字段文本用作針對的命令字符串。右對齊尾部對齊在所需的字段文本尺寸小于為它分配的尺寸時使用。這是由和方法確定的。如果具有操作偵聽器,則導致偵聽器獲取一個,并使用事件。 介紹 JTextField是一個輕量級組件,它允許編輯單行文本。 JTextField 具有建立字符串的方法,此字符串用作針對被激發的操作事件的命令字符串。java.awt.T...
摘要:掃描槍讀取的數據,通常自帶回車。開發相關系統時,需要編寫一個模擬掃描槍的。將作為按鈕的事件監聽器。設計時,就有兩個選項在后是否自帶回車。推薦一款適合二次開發的掃描槍迷你條碼掃描槍 掃描槍讀取的數據,通常自帶回車。開發相關系統時,需要編寫一個模擬掃描槍的QRReaderDialog。java.awt.RobotJTextField作為數據接受控件,在它上面按下Enter鍵,可以監聽Act...
閱讀 1411·2021-10-11 10:59
閱讀 3112·2019-08-30 15:54
閱讀 2732·2019-08-30 13:19
閱讀 2461·2019-08-30 13:02
閱讀 2374·2019-08-30 10:57
閱讀 3355·2019-08-29 15:40
閱讀 985·2019-08-29 15:39
閱讀 2308·2019-08-29 12:40