Android SeekBar設置指示器標簽,使用PopupWindow的方式

給Android 原生的SeekBar控件添加一個指示器標簽;記錄一下

按下時彈出popupwindow,進度條更新時刷新pw,松開時關閉pw;

public class SeekBarPopUtils {private static PopupWindow popWin = null;private static ConstraintLayout clPopPar = null;private static TextView tvPopTxt = null;public static void showPop(int progress,View seekBar){popWin = new PopupWindow();View mPopView = LayoutInflater.from(BaseApp.Companion.getAppContext()).inflate(R.layout.item_popup_win,null,false);clPopPar = mPopView.findViewById(R.id.cl_pop_par);tvPopTxt = mPopView.findViewById(R.id.tv_pop_txt);popWin.setContentView(mPopView);popWin.setHeight(dp2px(30));popWin.setWidth(seekBar.getWidth());popWin.showAsDropDown(seekBar,0,-(dp2px(30) + popWin.getHeight()));move(progress,seekBar);}public static void move(int progress,View seekBar){if (clPopPar != null){int tvPopWidth = dp2px(40);ConstraintLayout.LayoutParams params  = new ConstraintLayout.LayoutParams(tvPopWidth, dp2px(30));params.startToStart = clPopPar.getId();params.setMarginStart((seekBar.getWidth() - tvPopWidth)/100 * progress + tvPopWidth/3);tvPopTxt.setLayoutParams(params);tvPopTxt.setText(progress"");}}private static int dp2px(int dpVal){return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,(float) dpVal,BaseApp.Companion.getAppContext().getResources().getDisplayMetrics());}public static void dismiss(){popWin.dismiss();popWin = null;clPopPar = null;tvPopTxt = null;}
}

布局:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayoutandroid:id="@+id/cl_pop_par"xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="30dp"android:layout_height="40dp"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"><TextViewandroid:id="@+id/tv_pop_txt"android:layout_width="30dp"android:layout_height="40dp"android:gravity="center"android:paddingBottom="10px"app:layout_constraintStart_toStartOf="parent"app:layout_constraintBottom_toBottomOf="parent"android:textSize="14sp"android:background="@mipmap/popup_center_seekbar_qipao"android:textColor="#fff"tools:text = "55" /></androidx.constraintlayout.widget.ConstraintLayout>

使用:

mSeekbar.setOnSeekBarChangeListener(object: SeekBar.OnSeekBarChangeListener{override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {SeekBarPopUtils.move(progress,seekBar!!)}override fun onStartTrackingTouch(seekBar: SeekBar?) {SeekBarPopUtils.showPop(seekBar!!)}override fun onStopTrackingTouch(seekBar: SeekBar?) {SeekBarPopUtils.dismiss()}})

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

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

相關文章

Kotlin協程使用詳解

協程是什么 協程是一種編程思想,并不局限于特定的語言。協程是輕量級的線程,基于線程池API,通俗的來說,就是官方提供的線程框架。協程的調度完全由用戶控制。協程擁有自己的寄存器上下文和棧。當我們在了解協程的時候,不可避免的會跟線程、進程作比較作分析,下面來貼個圖…

數據可視化之智慧城市的脈動與洞察

在數字化轉型的浪潮中,城市作為社會經濟發展的核心單元,正經歷著前所未有的變革。城市數據可視化大屏看板作為這一變革中的重要工具,不僅極大地提升了城市管理效率,還為公眾提供了直觀、全面的城市運行狀態視圖,成為智慧城市建設不可或缺的一部分。本文將深入探討以“城市…

ruoyi后臺修改

一、日志文件過大分包 \ruoyi-admin\src\main\resources\logback.xml <!-- 系統日志輸出 --> <appender name"file_info" class"ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/sys-info.log</file><!…

網安小貼士(9)網絡解密

一、前言 網絡解密技術的發展是一個不斷進化的過程&#xff0c;它與加密技術的進展緊密相連。 二、定義 網絡解密&#xff08;Network Decryption&#xff09;通常指的是在計算機網絡環境中&#xff0c;將加密的數據轉換回其原始可讀格式的過程。這個過程需要使用正確的密鑰…

0701_ARM5

練習&#xff1a;使用usart4 main.c #include "uart4.h"int main() {// 初始化 UART4hal_uart4_init();while (1) {// 發送一個字符串//hal_put_char( hal_get_char());hal_put_string(hal_get_string());}return 0; } usart4.c #include "uart4.h"//**…

ctfshow-web入門-文件包含(web88、web116、web117)

目錄 1、web88 2、web116 3、web117 1、web88 沒有過濾冒號 : &#xff0c;可以使用 data 協議&#xff0c;但是過濾了括號和等號&#xff0c;因此需要編碼繞過一下。 這里有點問題&#xff0c;我 (ls) 后加上分號發現不行&#xff0c;可能是編碼結果有加號&#xff0c;題目…

Spark MLLib面試題你會幾道?(萬字長文)

目錄 簡述Spark MLLib的主要組件及其功能 Spark MLLib支持哪些機器學習算法? 解釋RDD(彈性分布式數據集)的概念及其在MLLib中的作用 在Spark MLLib中,LabeledPoint是什么?如何使用它? 描述DataFrame和Dataset API在Spark MLLib中的重要性 什么是ML Pipeline?它解決…

【反悔堆 優先隊列 臨項交換 決策包容性】630. 課程表 III

本文涉及知識點 貪心 反悔堆 優先隊列 臨項交換 Leetcode630. 課程表 III 這里有 n 門不同的在線課程&#xff0c;按從 1 到 n 編號。給你一個數組 courses &#xff0c;其中 courses[i] [durationi, lastDayi] 表示第 i 門課將會 持續 上 durationi 天課&#xff0c;并且必…

WordPress網站違法關鍵詞字過濾插件下載text-filter

插件下載地址&#xff1a;https://www.wpadmin.cn/2025.html 插件介紹 WordPress網站違法關鍵詞字過濾插件text-filter由本站原創開發,支持中英文關鍵字自動替換成**號&#xff0c;可以通過自定義保存修改按鈕增加“預設關鍵字”&#xff0c;也可以導入定義好的txt文本形式的關…

實現模型貼圖的移動縮放旋轉

技術&#xff1a;threejscanvasfabric 效果圖&#xff1a; 原理&#xff1a;threejs中沒有局部貼圖的效果&#xff0c;只能通過map 的方式貼到模型上&#xff0c;所以說換一種方式來實現&#xff0c;通過canvasfabric來實現圖片的移動縮放旋轉&#xff0c;然后將整個畫布以map…

數據集 | 人臉公開數據集的介紹及下載地址

本文介紹了人臉相關算法的數據集。 1.人臉數據集詳情 1.1.Labeled Faces in the Wild (LFW) 論文 下載地址&#xff1a;LFW Face Database : Main (umass.edu) 是目前人臉識別的常用測試集&#xff0c;其中提供的人臉圖片均來源于生活中的自然場景&#xff0c;因此識別難度會…

DDR的拓撲與仿真

T型拓撲 vs Fly-by 由于T型拓撲在地址、命令和時鐘都是同時到達每個DDR芯片&#xff0c;所以同步的切換噪聲會疊加在一起&#xff0c;DDR越多這個信號上疊加的噪聲越大&#xff0c;T型拓撲的優點是地址、命令和時鐘都是同時到達&#xff0c;所以不需要做寫均衡Write leveling。…

Node.js 生成vue組件

在項目根目錄下創建 create.js /*** 腳本生成vue組件* 主要是利用node自帶的fs模塊操作文件的寫入* ===========================================* 準備步驟:* 1.輸入作者名* 2.輸入文件名* 3.輸入菜單名* 4.輸入文件地址* ============================================* 操…

【路徑規劃】基于A星算法實現機器人柵格地圖徑規劃附Matlab代碼

% 機器人柵格地圖路徑規劃(A*算法) % 假設你已經有了柵格地圖數據和起點終點坐標 % 柵格地圖數據 grid_map = your_grid_map_data; % 柵格地圖數據,0表示可行區域,1表示障礙物區域 % 起點和終點坐標 start = your_start_coordinates; % 起點坐標,格式為[x, y] goal = yo…

【3D->2D轉換(1)】LSS(提升,投放,捕捉)

Lift, Splat, Shoot 這是一個端到端架構&#xff0c;直接從任意數量的攝像頭數據提取給定圖像場景的鳥瞰圖表示。將每個圖像分別“提升&#xff08;lift&#xff09;”到每個攝像頭的視錐&#xff08;frustum&#xff09;&#xff0c;然后將所有視錐“投放&#xff08;splat&a…

AI助手崛起:開發者的新伙伴還是未來替代者?

你好&#xff0c;我是三橋君。 自從 ChatGPT 問市以來&#xff0c;AI 將取代開發者的聲音不絕于耳&#xff0c;至今還是互聯網異常火熱的問題。 在軟件開發領域&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;正在改變開發者的工作方式。無論是代碼生成、錯誤檢測還是…

【JavaWeb程序設計】JSP編程

目錄 一、編寫JSP頁面&#xff0c;在界面上顯示1-9&#xff0c;9個鏈接&#xff0c;單擊每個鏈接&#xff0c;能夠在另一個頁面打印該數字的平方。 1. 運行截圖 2. 第一個jsp頁面&#xff08;index.jsp&#xff09; 3. 第二個jsp頁面&#xff08;square.jsp&#xff09; 二…

RedHat運維-Linux存儲管理基礎1-添加分區、文件系統、持續性掛載

1. 假如當前系統上ls -alh /dev | grep ^b的結果如下所示&#xff0c;那么&#xff1a; [rhcerhel9 ~]$ ls -alh /dev | grep ^b brw-rw----. 1 root disk 253, 0 Jun 7 19:46 dm-0 brw-rw----. 1 root disk 253, 1 Jun 7 19:46 dm-1 brw-rw----. 1 root disk …

Arc for Windows 無法使用?一篇文章教會你!

&#x1f44b; 大家好&#xff0c;我是 Beast Cheng &#x1f4eb; 聯系我&#xff1a;458290771qq.com &#x1f331; 接合作、推廣…… 什么是Arc瀏覽器&#xff1f; Arc瀏覽器是The Browser Conpany使用Swift語言開發的一款瀏覽器&#xff0c;Arc瀏覽器由其漂亮的側邊欄聞名…

Python 異步編程介紹與代碼示例

Python 異步編程介紹與代碼示例 一、異步編程概述 異步編程是一種編程范式&#xff0c;它旨在處理那些需要等待I/O操作完成或執行耗時任務的情況。在傳統的同步編程中&#xff0c;代碼會按照順序逐行執行&#xff0c;直到遇到一個耗時操作&#xff0c;它會阻塞程序的執行直到…