安卓垂直進度條

package  你的包名;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;public class VerticalSeekBar extends View {private Paint paint;private float progressHeight;private float progress = 0;private float maxProgress = 100;private int trackColor = Color.WHITE;  // 背景顏色private int progressColor = Color.parseColor("#FF0365FF"); // 進度條顏色private float cornerRadius = 20; // 圓角半徑private OnProgressChangedListener progressChangedListener; // 回調接口public VerticalSeekBar(Context context) {this(context, null);}public VerticalSeekBar(Context context, AttributeSet attrs) {this(context, attrs, 0);}public VerticalSeekBar(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init();}private void init() {paint = new Paint();paint.setAntiAlias(true);paint.setStyle(Paint.Style.FILL);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);float width = getWidth();float height = getHeight();// 畫背景條:圓角矩形paint.setColor(trackColor);RectF backgroundRect = new RectF(0, 0, width, height);canvas.drawRoundRect(backgroundRect, cornerRadius, cornerRadius, paint);// 畫進度條:圓角矩形paint.setColor(progressColor);float progressTop = height - progressHeight;RectF progressRect = new RectF(0, progressTop, width, height);canvas.drawRoundRect(progressRect, cornerRadius, cornerRadius, paint);}@Overridepublic boolean onTouchEvent(MotionEvent event) {float y = event.getY();switch (event.getAction()) {case MotionEvent.ACTION_DOWN:case MotionEvent.ACTION_MOVE:// 計算進度float height = getHeight();progressHeight = height - y;if (progressHeight < 0) progressHeight = 0;if (progressHeight > height) progressHeight = height;progress = (maxProgress * progressHeight) / height;invalidate(); // 重繪視圖// 調用回調方法,傳遞進度變化if (progressChangedListener != null) {progressChangedListener.onProgressChanged(progress);}return true;}return super.onTouchEvent(event);}// 獲取當前的進度public float getProgress() {return progress;}// 設置進度public void setProgress(float progress) {this.progress = progress;invalidate();}// 設置最大進度public void setMaxProgress(float maxProgress) {this.maxProgress = maxProgress;}// 設置顏色public void setTrackColor(int color) {this.trackColor = color;}public void setProgressColor(int color) {this.progressColor = color;}// 設置圓角半徑public void setCornerRadius(float radius) {this.cornerRadius = radius;}// 設置回調接口public void setOnProgressChangedListener(OnProgressChangedListener listener) {this.progressChangedListener = listener;}// 定義回調接口public interface OnProgressChangedListener {void onProgressChanged(float progress);}
}

在activity中:

<路徑.VerticalSeekBarandroid:id="@+id/seekBar"android:layout_width="match_parent"android:layout_height="match_parent"/>

在代碼中

    binding.seekBar.apply {setMaxProgress(100f)progress = 50fsetOnProgressChangedListener {}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/902504.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/902504.shtml
英文地址,請注明出處:http://en.pswp.cn/news/902504.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

hackmyvm-airbind

收集信息 arp-scan -l nmap -sS -v 192.168.195.162 訪問掃描到的ip&#xff0c;直接跳轉到登錄頁面&#xff0c;利用admin/admin弱口令登錄 在settings.php中找到一處文件上傳&#xff0c;上傳一句話木馬&#xff0c;上傳成功 反彈shell 上傳php-reverse-shell.php 抓包&am…

【Rust 精進之路之第14篇-結構體 Struct】定義、實例化與方法:封裝數據與行為

系列: Rust 精進之路:構建可靠、高效軟件的底層邏輯 作者: 碼覺客 發布日期: 2025-04-20 引言:超越元組,給數據賦予意義 在之前的學習中,我們了解了 Rust 的基本數據類型(標量)以及兩種基礎的復合類型:元組 (Tuple) 和數組 (Array)。元組允許我們將不同類型的值組合…

jenkins尾隨命令

在訪問jenkins的網址后面可以追加命令&#xff0c;比如訪問地址是 http://10.20.0.124:8080/&#xff0c;常用的有以下幾種方式&#xff1a; 1.關閉Jenkins 只要瀏覽器輸入http://10.20.0.124:8080/exit即可退出&#xff0c;或者http://localhost:8080/exit 2.重啟Jenkins …

相機模型--CMOS和CCD的區別

1--CMOS和CCD的工作原理 CCD&#xff08;Charge Coupled Device&#xff0c;電荷耦合器件&#xff09;&#xff1a; 1. 圖像通過光電效應在感光單元中轉化為電荷&#xff1b; 2. 每個像素上的電荷被依次“耦合”并傳輸到芯片的角落&#xff0c;通過一個或幾個模擬輸出放大器輸…

二叉樹理論基礎

二叉樹種類 滿二叉樹&#xff1a;每個非葉子節點都有且只有兩個子節點。 和完全二叉樹&#xff1a;除了最底層外&#xff0c;其他各層都是滿的&#xff1b;最底層的節點都集中在左側。 二叉搜索樹&#xff1a;對于任意節點 u&#xff0c;左子樹上所有節 點的值都小于 u.val…

使用ZYNQ芯片和LVGL框架實現用戶高刷新UI設計系列教程(第九講)

這一期講解GUI_guider中的容器控件的使用以及相關函數&#xff0c;容器本質上是具有布局和自動調整大小功能的基本對象 &#xff0c;通常用來裝載其他子控件。 打開上一期的項目&#xff0c;在工具欄中選中容器控件拖拽到界面中&#xff0c;具體如圖所示&#xff1a; 容器默認…

qt QGroupButton 實現兩個QPushButton的互斥

import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QButtonGroup, QVBoxLayoutclass ExampleApp(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):# 創建兩個 QPushButtonself.button1 QPushButton("按鈕1&quo…

工業物聯網的可視化編程革新:Node-RED與邊緣計算的深度融合-縱橫智控

在工業物聯網的演進歷程中&#xff0c;可視化編程工具正成為打破技術壁壘的核心力量。Node-RED作為開源的可視化編程平臺&#xff0c;通過其獨特的拖拽式邏輯構建能力&#xff0c;為設備連接、數據處理與業務邏輯設計提供了全新范式。本文將深入解析Node-RED的技術優勢&#xf…

Uniapp:view容器(容器布局)

目錄 一、基本概述二、屬性說明三、常用布局3.1 橫向布局3.2 縱向布局3.3 更多布局3.3.1 縱向布局-自動寬度3.3.2 縱向布局-固定寬度3.3.3 橫向布局-自動寬度3.3.4 橫向布局-居中3.3.5 橫向布局-居右3.3.6 橫向布局-平均分布3.3.7 橫向布局-兩端對齊3.3.8 橫向布局-自動填充3.3…

(最新)華為 2026 屆校招實習-硬件技術工程師-硬件通用/單板開發—機試題—(共14套)(每套四十題)

&#xff08;最新&#xff09;華為 2026 屆校招實習-硬件技術工程師-硬件通用/單板開發—機試題—&#xff08;共14套&#xff09;&#xff08;每套四十題&#xff09; 本套題目為硬件通用題目&#xff0c;適合多個崗位方向&#xff0c;如下 **崗位——硬件技術工程師 崗位意向…

AWS Lambda 架構深入探究

AWS Lambda 是現代云架構中最受歡迎的服務之一,因其能夠在完全托管的無服務器環境中運行代碼而廣受認可。然而,盡管 Lambda 廣受歡迎,許多開發者和架構師對它的底層運作機制卻知之甚少,常常將其視為“編寫能夠在云端神奇運行的代碼”的簡單方法。 本文將探討 AWS Lambda 背…

Android audio系統五 AudioPolicy 策略配置詳解

引用&#xff1a;Android 音頻策略配置文件解析流程 audio_policy_configuration.xml 是 Android 音頻系統的核心配置文件&#xff0c;它定義了音頻硬件接口、設備路由和基本策略。下面我將詳細介紹這個文件的結構、關鍵配置項和實際應用。audio_policy_configuration.xml 是 …

4.21日學習--引用

引用本質&#xff1a;引用的本質在 c 內部實現是一個指針常量。 代碼中 int& ref a; 可以理解為 int* const ref &a;&#xff08;指針常量&#xff09;。 指針常量&#xff1a;指針指向不可變&#xff08;綁定 a 后&#xff0c;不能再指向其他變量&#xff09;&…

2.1 數據處理

1. 數據獲取方法 掌握公開數據集的使用、數據質量評估指標、了解常見的網絡爬蟲技術 &#x1f9e9; 一、公開數據集的使用 ? 常見平臺&#xff08;一定要熟&#xff09; 平臺簡介示例數據集Hugging Face Datasets專注 NLP、CV 領域的大模型訓練數據集庫IMDB、SQuAD、Common …

Qt QWidget和QML實現窗口拖動源碼分享

一、QWidget實現窗口拖動 .hpp QPoint pressedPoint; bool leftBtnPressed false;.cpp bool PetWidget::eventFilter(QObject *obj, QEvent *event) {if(obj this){if(event->type() QEvent::MouseButtonPress){QMouseEvent* e static_cast<QMouseEvent *>(event)…

在pycharm中搭建yolo11分類檢測系統--PyQt5學習(二)

第二部分 測試本地pycharm通過程序連接遠程服務器autodl 模型的推理需要借助遠程服務器autodl&#xff0c;但是界面的運行是在pycharm中&#xff0c;我的設想是按鈕調用一個py文件就好了。 1. 本地運行PyQt5界面。 2. 當需要載入權重時&#xff0c;通過SSH連接到AutodL服務…

前端框架的“快閃“時代:我們該如何應對技術迭代的洪流?

引言&#xff1a;前端開發者的"框架疲勞" “上周剛學完Vue 3的組合式API&#xff0c;這周SolidJS又火了&#xff1f;”——這恐怕是許多前端開發者2023年的真實心聲。前端框架的迭代速度已經達到了令人目眩的程度&#xff0c;GitHub每日都有新框架誕生&#xff0c;n…

基于YOLO11的遛狗牽繩識別預警系統

基于YOLO11的遛狗牽繩識別預警系統 【包含內容】 【一】項目提供完整源代碼及詳細注釋 【二】系統設計思路與實現說明 【三】預訓練模型與數據集說明 【四】需要列出所有的類別&#xff0c;并且加入識別的類別數量&#xff1a;4類 0: dog (狗) 1: leash (牽引繩) 2: person …

Spring MVC 一個簡單的多文件上傳

原始代碼逐行解釋 PostMapping("/uploads") // ① 聲明處理POST請求&#xff0c;路徑為"/uploads" ResponseBody // ② 直接返回數據到響應體&#xff0c;不進行視圖解析 public String uploads(MultipartFile[] files, // …

C++繼承(最詳細)

目錄 1.繼承的概念以及定義 1.1 繼承的概念 1.2 繼承的定義 ?編輯 2.繼承中的作用域 3.基類和派生類間的轉換 4.派生類的默認成員函數 5.實現不被繼承的類 6.継承與友元 ?編輯 7.繼承與靜態成員 8.多繼承及其菱形繼承問題 8.2 虛繼承 8.3 來看一個小題 9.繼承…