色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Android實(shí)現(xiàn)儀表盤(pán)控件開(kāi)發(fā)

瀏覽:83日期:2022-09-18 13:34:15

儀表盤(pán)在工業(yè)軟件中很常見(jiàn),今天整一個(gè)圖片式儀表盤(pán)控件(非幾何圖形繪制)。實(shí)現(xiàn)非常簡(jiǎn)單,一張背景圖,一張指針。創(chuàng)建一個(gè)RelativeLayout布局文件,然后在里面布置好控件的位置,代碼如下

<?xml version='1.0' encoding='utf-8'?><RelativeLayout xmlns:android='http://schemas.android.com/apk/res/android' android:layout_width='wrap_content' android:layout_height='wrap_content'> <ImageViewandroid: android:layout_width='wrap_content'android:layout_height='wrap_content'android:layout_centerInParent='true'android:src='http://www.lshqa.cn/bcjs/@mipmap/meter_h_bk' /> <ImageViewandroid: android:layout_width='wrap_content'android:layout_height='wrap_content'android:layout_alignBottom='@id/id_dial'android:layout_centerInParent='true'android:src='http://www.lshqa.cn/bcjs/@mipmap/meter_fr' /> <com.tech.view.DigitalTextandroid: android:layout_width='wrap_content'android:layout_height='wrap_content'android:layout_alignBottom='@id/id_dial'android:layout_centerHorizontal='true'android:layout_marginBottom='2dp'android:text='29.9'android:textColor='@android:color/white'android:textSize='21sp' /></RelativeLayout>

DigitalText是使用第三方字體控件,這個(gè)可自行百度搜索想要的字體。然后寫(xiě)一個(gè)儀表盤(pán)控件類(lèi),DialBoard

代碼如下

public class DialBoard { private static final String TAG = DialBoard.class.getName(); private ImageView dialPoint; private TextView text; private static final float MAX = 120.0f; private static final float MIN = -120.0f; private boolean animationDone = true; public DialBoard(Activity activity) {dialPoint = activity.findViewById(R.id.id_dial_point);text = activity.findViewById(R.id.id_value);text.setText(String.format('%.02f', 0.0f));setRotation(MIN, true); } public synchronized void moveTo(float progress) {if (animationDone) new Thread(() -> move(progress)).start(); } private void move(float progress) {animationDone = false;float offset = (MAX - MIN) / 100;final float STEP = 2.0f;//理論上要小于offsetfloat curProgress = (dialPoint.getRotation() - MIN) / offset;//計(jì)算當(dāng)前進(jìn)度和目標(biāo)進(jìn)度方向,步數(shù)float value = Math.abs(curProgress - progress);while (value > 0.1f) { value = (value < 1.0f ? 0.2f : STEP); if (progress < curProgress) value = -value; setRotation(dialPoint.getRotation() + value, false); Tools.sleep(10); curProgress = (dialPoint.getRotation() - MIN) / offset; value = Math.abs(curProgress - progress); final float textValue = curProgress; text.post(() -> text.setText(String.format('%.02f', textValue)));}text.post(() -> text.setText(String.format('%.02f', progress)));animationDone = true; } /** * @param rotation MIN~MAX */ public void setRotation(float rotation) {this.setRotation(rotation, false); } private void setRotation(float rotation, boolean onCreate) {if (onCreate) { int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); int h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); dialPoint.measure(w, h);//測(cè)量控件大小}int width = dialPoint.getMeasuredWidth();int height = dialPoint.getMeasuredHeight();dialPoint.post(() -> { dialPoint.setPivotX(width * 0.5f); dialPoint.setPivotY(height * 0.82666f); dialPoint.setRotation(rotation);}); }}

最終效果圖

Android實(shí)現(xiàn)儀表盤(pán)控件開(kāi)發(fā)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 九色愉拍自拍 | 三级网站免费观看 | 欧美日韩a∨毛片一区 | 免费高清在线爱做视频 | 国产一级特黄aaa大片 | 欧美在线一级毛片观看 | 国产成人精品免费视频大全可播放的 | 99精品视频一区在线视频免费观看 | 欧美日韩 国产区 在线观看 | 18lxxlxx日本| 国产精品国产三级国产在线观看 | 国产丶欧美丶日韩丶不卡影视 | 亚洲国产精品久久人人爱 | 亚洲国产激情 | 欧美日韩一区二区高清视 | 国产精品国产亚洲精品看不卡 | 韩国一级永久免费观看网址 | 亚洲一区二区在线成人 | 一区二区三区在线 | 网站 | 久久久久久亚洲精品不卡 | 91香蕉成人免费高清网站 | 国产成人精品日本亚洲专区6 | 久久久久久久网站 | 香蕉久| 国产精品成人不卡在线观看 | 在线免费精品视频 | 国产大学生自拍 | 国产精品久久久久久久久久98 | 久久精品视频一区二区三区 | 欧洲97色综合成人网 | 中文偷拍视频在线观看 | 日本黄网站高清色大全 | 澳门毛片在线播放 | 5x社区直接进入一区二区三区 | 在线观看精品视频网站www | 香港三级网站 | 亚洲视频网址 | 国产成人精品视频频 | 亚洲男人的天堂久久无 | 精品视自拍视频在线观看 | 亚洲国产福利精品一区二区 |