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