android 垂直的进度条实现

Android自定义垂直触摸控制进度条实现 本文还有配套的精品资源,点击获取 简介:在Android开发中,通过继承 ProgressBar 类和重写 onTouchEvent 方法,可以创建一个可触摸控制的垂直进度条。用户可以通过上下滑动来调整进度,为应用提供直观的交互。实现时,需要记录触摸开始的位置,并在触摸移动时根据位置计算进度变化。在触摸结束时,可以通知监听器进度已完成。此外,还需... 阅读详情

效果图:


利用TimerTask动态改变滚动条前景色

主要代码如下:

activity_main.xml

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"   
  5.     android:gravity="center"  
  6.     >  
  7.   
  8.     <LinearLayout  
  9.         android:layout_width="wrap_content"  
  10.         android:layout_height="wrap_content"  
  11.         android:background="@drawable/main_battery_bg"  
  12.         android:orientation="horizontal" >  
  13.   
  14.         <ProgressBar  
  15.             android:id="@+id/pb_battery"  
  16.             android:layout_width="fill_parent"  
  17.             android:layout_height="fill_parent"  
  18.             android:indeterminate="false"  
  19.             android:indeterminateOnly="false"  
  20.             android:progress="0"  
  21.             android:progressDrawable="@drawable/main_progress_vertical" />  
  22.     </LinearLayout>  
  23.   
  24. </RelativeLayout>  
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:gravity="center"
    >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/main_battery_bg"
        android:orientation="horizontal" >

        <ProgressBar
            android:id="@+id/pb_battery"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:indeterminate="false"
            android:indeterminateOnly="false"
            android:progress="0"
            android:progressDrawable="@drawable/main_progress_vertical" />
    </LinearLayout>

</RelativeLayout>
main_progress_vertical.xml

  1. <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >  
  2.  
  3. <item android:id="@android:id/background"> (这里设置的是进度条的外观颜色还有呈现的方向等)
            <shape>
                <corners android:radius="5dip" />

                <gradient
                    android:angle="180"
                    android:centerColor="#F6F6F6"
                    android:endColor="#C0C0C0"
                    android:startColor="#C0C0C0"
                    android:type="linear" />
            </shape>
        </item>

  4.     <item android:id="@android:id/progress">  (这里设置的是进度的呈现格式,有颜色的过度等,已经进度前进的方向)
  1.         <clip  
  2.             android:clipOrientation="vertical"  
  3.             android:gravity="bottom" >  
  4.             <shape>  
  5.                 <corners android:radius="5dip" />  
  6.   
  7.                 <gradient  
  8.                     android:angle="180"  
  9.                     android:centerColor="#ffffcb00"  
  10.                     android:centerY="0.75"  
  11.                     android:endColor="#ffffcb00"  
  12.                     android:startColor="#ffffcb00" />  
  13.             </shape>  
  14.         </clip>  
  15.     </item>  
  16.   
  17. </layer-list>  
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:id="@android:id/progress">
        <clip
            android:clipOrientation="vertical"
            android:gravity="bottom" >
            <shape>
                <corners android:radius="5dip" />

                <gradient
                    android:angle="180"
                    android:centerColor="#ffffcb00"
                    android:centerY="0.75"
                    android:endColor="#ffffcb00"
                    android:startColor="#ffffcb00" />
            </shape>
        </clip>
    </item>

</layer-list>

main_progress_vertical_warn.xml

  1. <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >  
  2.   
  3.     <item android:id="@android:id/progress">  
  4.         <clip  
  5.             android:clipOrientation="vertical"  
  6.             android:gravity="bottom" >  
  7.             <shape>  
  8.                 <corners android:radius="5dip" />  
  9.   
  10.                 <gradient  
  11.                     android:angle="180"  
  12.                     android:centerColor="#ff0000"  
  13.                     android:centerY="0.75"  
  14.                     android:endColor="#ff0000"  
  15.                     android:startColor="#ff0000" />  
  16.             </shape>  
  17.         </clip>  
  18.     </item>  
  19.   
  20. </layer-list>  
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:id="@android:id/progress">
        <clip
            android:clipOrientation="vertical"
            android:gravity="bottom" >
            <shape>
                <corners android:radius="5dip" />

                <gradient
                    android:angle="180"
                    android:centerColor="#ff0000"
                    android:centerY="0.75"
                    android:endColor="#ff0000"
                    android:startColor="#ff0000" />
            </shape>
        </clip>
    </item>

</layer-list>

MainActivity

  1. import java.util.Timer;  
  2. import java.util.TimerTask;  
  3.   
  4. import android.os.Bundle;  
  5. import android.app.Activity;  
  6. import android.graphics.drawable.Drawable;  
  7. import android.widget.ProgressBar;  
  8.   
  9. public class MainActivity extends Activity {  
  10.   
  11.     /** 
  12.      * 达到警告线 
  13.      */  
  14.     public static final int BATTERYWARN = 20;  
  15.     private ProgressBar pBar;  
  16.     /** 
  17.      * 需要改变多少 
  18.      */  
  19.     private int progressAdd = 0;  
  20.     /** 
  21.      * 改变是上升还是下降 
  22.      */  
  23.     private int actionType = 1;  
  24.     /** 
  25.      * 原来的progress值 
  26.      */  
  27.     private int progressOld = 0;  
  28.     private Timer timer = new Timer();  
  29.   
  30.     /** 
  31.      * 动态改变滚动条的ProgressDrawable 
  32.      *  
  33.      * @param resId 
  34.      *            Drawable资源ID 
  35.      */  
  36.     private void setProgressDrawable(int resId) {  
  37.         Drawable drawable = MainActivity.this.getResources().getDrawable(resId);  
  38.         drawable.setBounds(pBar.getProgressDrawable().getBounds());  
  39.         /* 设置drawable之后貌似getProgress是从当前的为progress值为起始, 
  40.          * 所以注意先取得progress,然后重置progres=0,然后设置drawable, 
  41.          * 最后再把原来的progress还原,要不然设置了drawable之后ProgressBar的前景色会消失 
  42.          * 这里不会出现这种问题,因为progress始终是变化的,前景色的变化设置drawable也只执行一次 
  43.         */  
  44.         pBar.setProgressDrawable(drawable);  
  45.     }  
  46.   
  47.     /** 
  48.      * 电池滚动条特效 
  49.      */  
  50.     private TimerTask task = new TimerTask() {  
  51.         int add = 0;  
  52.   
  53.         public void run() {  
  54.             try {  
  55.                 while (add++ < progressAdd) {  
  56.                     int progress = pBar.getProgress() + actionType;  
  57.                     progressOld = progress - actionType;  
  58.                     if (progress <= BATTERYWARN) {  
  59.                         // 初始时 或者 原先的值大于下限(只执行一次动态改变ProgressDrawable)   
  60.                         if (progressOld == 0 || progressOld > BATTERYWARN) {  
  61.                             setProgressDrawable(R.drawable.main_progress_vertical_warn);  
  62.                         }  
  63.   
  64.                     } else {  
  65.                         // 原先的本身比下限小并且有值则还原进度条默认颜色(只执行一次动态改变ProgressDrawable,原来没值时按默认)   
  66.                         if (progressOld > 0 && progressOld <= BATTERYWARN) {  
  67.                             setProgressDrawable(R.drawable.main_progress_vertical);  
  68.                         }  
  69.                     }  
  70.   
  71.                     pBar.setProgress(progress);  
  72.                     // 最后一次不用休眠   
  73.                     if (add < progressAdd) {  
  74.                         Thread.sleep(30);  
  75.                     }  
  76.                 }  
  77.             } catch (InterruptedException e) {  
  78.                 e.printStackTrace();  
  79.             }  
  80.         }  
  81.     };  
  82.   
  83.     protected void onCreate(Bundle savedInstanceState) {  
  84.         super.onCreate(savedInstanceState);  
  85.         setContentView(R.layout.activity_main);  
  86.   
  87.         initView();  
  88.         bindData(true);  
  89.     }  
  90.   
  91.     /** 
  92.      * 初始化view 
  93.      */  
  94.     private void initView() {  
  95.         pBar = (ProgressBar) findViewById(R.id.pb_battery);  
  96.         pBar.setMax(100);  
  97.     }  
  98.   
  99.     /** 
  100.      * 绑定数据 
  101.      *  
  102.      * @param isStart 
  103.      *            初始绑定还是有广播数据变更需要刷新数据,tru初始绑定数据,false有广播数据变更需要刷新数据 
  104.      */  
  105.     private void bindData(boolean isStart) {  
  106.         // 测试数据,收入   
  107.         int moneyIn = 30;  
  108.         // 测试数据,预算   
  109.         int moneyYs = 300;  
  110.         // 测试数据,支出   
  111.         double moneyOut = 110;  
  112.           
  113.         // 目前滚动条状态%值   
  114.         int progress = 100 - (int) ((moneyOut / (moneyIn + moneyYs)) * 100);  
  115.   
  116.         /*测试下降 
  117.         //测试数据,原滚动条状态值 
  118.         pBar.setProgress(progress); 
  119.         //测试数据,别处操作了收入、支出、预算的数据使其发生了变化 
  120.         isStart = false; 
  121.         */  
  122.           
  123.           
  124.         // 初始加载   
  125.         if (isStart) {  
  126.             progressAdd = progress;  
  127.         } else {  
  128.             // 测试数据,测试下降需要把上面的  /*测试下降  注释去掉   
  129.             progress = 5;  
  130.             progressOld = pBar.getProgress();  
  131.   
  132.             // 上升还是下降   
  133.             progressAdd = progress - progressOld;  
  134.             if (progressAdd < 0) {  
  135.                 actionType = -1;  
  136.                 progressAdd *= -1;  
  137.             }  
  138.         }  
  139.   
  140.         // 过500毫秒执行task   
  141.         timer.schedule(task, 500);  
  142.     }  
  143.   
  144. }  
android竖直进度条 android下的竖直进度条源码,也是在网上搜到的,在这里给大家分享,希望大家有什么好的东东也分享下。 立即下载

相关推荐

android垂直滚动条(VerticalSeekbar)

android实现的垂直滚动条 android实现的垂直滚动条

安卓控件之竖向进度条

安卓进度条控件 竖向

qq_49757305的博客 2359

Android实现垂直进度条VerticalSeekBar

本文实例为大家分享了Android实现垂直进度条的具体代码,供大家参考,具体内容如下 水平的进度条见多了,总会想见个垂直的进度条开开眼。今天咱就试试。 要说原理也简单,就是把宽高倒置,其他的理论上都不需要动,发现问题再补补也就行了。 官方提供 官方是提供了垂直进度条的例子源码的,位置在android-sdk-windows\sources\android-23\com\android\example\rscamera\VerticalSeekBar.java,当然首先你SDK中要有Android 6.0。 VerticalSeekBar.java /** * Class to creat

android 垂直方向进度条progressbar

android 垂直方向进度条progressbar

Android framework 993

利用Ghidra与SVD插件实现STM32固件深度逆向分析

本文详细介绍了如何利用Ghidra逆向工程框架结合SVD插件,实现对STM32固件(.bin文件)的深度逆向分析。通过加载描述芯片外设寄存器的SVD文件,Ghidra能将晦涩的硬件地址操作转换为可读的寄存器符号,极大提升了对嵌入式固件中通信协议、安全校验等关键逻辑的分析效率。文章涵盖了从Java环境搭建、工具配置到实战逆向解析的完整流程。

peach的博客 942

英飞凌IGBT驱动芯片2ED020I12F2去饱和电路设计总结整理收集

记录下英飞凌IGBT驱动芯片限流电阻阻值设计

nizhenyuchina的博客 5994

Android绘制垂直进度条并且动态更改进度条颜色

自定义垂直进度条

weixin_46999174的博客 1305

本地大模型部署实战:LM Studio与Ollama的易用性与性能深度评测

本文对两款主流本地大模型部署工具LM Studio和Ollama进行了深度评测。LM Studio凭借图形化界面和内置模型库,为新手提供了开箱即用的便捷体验,并支持OpenAI兼容API,易于生态集成。Ollama则以命令行驱动,轻量高效,凭借其原生API和Modelfile自定义能力,在自动化集成和性能方面表现突出。文章从易用性、模型生态、性能及扩展性多维度对比,帮助用户根据自身技术背景和使用场景做出最佳选择。

weixin_29039773的博客 528

java安卓开发进度条_Android实现垂直进度条VerticalSeekBar

本文实例为大家分享了android实现垂直进度条的具体代码,供大家参考,具体内容如下水平的进度条见多了,总会想见个垂直的进度条开开眼。今天咱就试试。要说原理也简单,就是把宽高倒置,其他的理论上都不需要动,发现问题再补补也就行了。官方提供官方是提供了垂直进度条的例子源码的,位置在android-sdk-windows\sources\android-23\com\android\example\rs...

weixin_28961565的博客 732

CMIP6数据处理及在气候变化、水文、生态等领域中的应用

CMIP6、Biome-BGC、生态、气候变化、气象、水文、气候模式、植被、生态模式、遥感、极端气候、降水、WRF模式、动力降尺度、RCM、大气环流模型、贝叶斯模型、、降尺度

PhyliciaFelicia的博客 1541

大厂面经:京东大数据面试题及参考答案(3万字长文)

Kafka是一个开源的分布式流处理平台,由 LinkedIn 开发并在 2011 年贡献给 Apache 软件基金会。高吞吐量:能够处理大量的数据流,适合实时数据管道。持久性:数据存储在磁盘上,确保数据不丢失。容错性:通过数据复制提供高可用性。扩展性:支持水平扩展,易于增加更多节点。Kafka 的核心概念Topic:逻辑上的数据流,可以理解为主题。Producer:生产数据的应用程序。Consumer:消费数据的应用程序。Broker:Kafka 集群中的服务器节点。Partition。

大模型大数据攻城狮的专栏 863

Android 垂直SeekBar 控件:实现自定义进度条的好帮手

Android 垂直SeekBar 控件:实现自定义进度条的好帮手 1. 项目基础介绍及主要编程语言 本项目是Android平台上的一个开源库,名为android-verticalseekbar。该项目由Haruki Hasegawa开发,并使用Java语言编写。该库提供了一个垂直方向的SeekBar控件,适用于Android 4.0(IceCream Sandwich)至Android 9.x(...

gitblog_00804的博客 572

YOLO11检测中的内存占用分析与优化:讲解如何分析并优化推理时的内存使用

YOLOv11模型内存分析与优化摘要:本文系统分析了YOLOv11目标检测模型的内存使用模式,重点探讨了显存(VRAM)、系统内存(RAM)和共享内存的特性差异。通过PyTorch内置工具和自定义分析器,详细剖析了骨干网络、颈部网络和检测头各组件内存占用规律,指出激活值内存与输入尺寸呈平方级增长关系。文章提供了卷积层内存计算公式,并强调合理规划"工作台"(显存)与"仓库"(内存)间的数据流动是优化关键。最后通过流程图直观展示了YOLOv11推理过程的三类内存使用模式,

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 343

android 圆形进度条 垂直对称渐变,Android实现圆形渐变加载进度条

最近设计要求要一个圆形进度条渐变的需求:1.画圆形进度条2.解决渐变最终实现效果代码package com.view;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Color;import andr...

weixin_42298927的博客 264

vue2 - 详细实现播放AMR格式音频并实现自定义播放器样式,支持amr音频文件在线地址URL播放、调用服务端API接口获取二进制文件流amr形式、用户本地上传amr文件并实现立即播放(详细代码)

vue2,amr,amr文件播放,vue播放amr音频文件以及在线url跨域问题解决,vue使用audio标签播放amr音频,amr跨域解决,amr网页解码播放,文件上传后怎么播放,vue2播放.amr语音文件,api接口形式调用获取的amr如何播放,vue中如何使用audio元素播放AMR格式的文件,进度条,vue前端如何播放AMR格式的音频文件,vue播放语音文件AMR格式,播放amr格式音频AMR录音机,h5原生audio播放amr格式的音频,VUE2使用benz-amr-recorder 实现解码、

✅ 精选推荐文章 7413

机器学习(十九):梯度提升回归(GBR)

机器学习中的梯度提升回归算法原理与案例实战。

全栈川川 5156

安卓垂直进度条

【代码】安卓垂直进度条。

m0_50774720的博客 611

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

android 垂直的开关_android 实现垂直的ProgressBar

I had recently come across the need for a vertical progress bar but was unable to find a solution using the existing Progress Bar widget. The solutions I came across generally required an extension of...

weixin_39617470的博客 311

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

android弧形背景,Android 弧形进度条

Android自带的progressbar组件基本可以满足常用的一些需求,最近一套新UI用到了弧形的进度条,如图最初看到,自己是想自己实现,涉及到的问题就比较多,需要一些精确的计算画上去,整个屏幕的背景图是这样的:不过在动手前,自己又百度了一些自定义进度条的文章看了一下。看了一篇受了很大的启发,这个弧形的效果完全可以用一个垂直的进度条来实现。使用这样一张图:弧形与背景图的轨迹一样,然后整张图是长方...

weixin_39924307的博客 450

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android垂直seekbar

这两头要用到垂直seekbar,但是android自带的没有垂直的,到网上找了一个开源的代码,发现里面的滑动块不能随进度条一起变动bug。后来又在这个开源项目里找到原作者做的修改。才实现了滑动块随进度条一起移动。 调用方法有变动,需要用seekbar.setProgressAndThumb(10),而不是seekbar.setProgress(10); 代码如下: import andro

Laughing 1600

android 垂直 进度条,Android垂直进度条

垂直样式drawable中增加progress_vertical.xmlandroid:clipOrientation = "vertical"android:drawable = "@drawable/progress1"android:gravity = "bottom">ProgressBarandroid:id="@+id/pbPic"style="@android:style/Wi...

weixin_39796752的博客 354

在android中怎么定义垂直,android 实现垂直的ProgressBar

I had recently come across the need for a vertical progress bar but was unable to find a solution using the existing Progress Bar widget. The solutions I came across generally required an extension of...

weixin_35125597的博客 533

Android---垂直的进度条(VerticalSeekBar、VerticalProgressBar)

在做播放器的时候使用到垂直的拖动条,在github搜索了一下,拿了一个开源的来用下。       核心部分就是:               在视图上重新绘画一次,将画布旋转90度。                canvas.rotate(-90);   //旋转屏幕90度        canvas.translate(-getHeight(), 0); //设置画布的原点为控件的高。

yubestming_job的专栏 2883

android进度条垂直,ProgressView_-ProgressView是一个继承Progressbar的进度视图,目前实现了带数字进度的水平进度条以及圆形进度条,圆形进度条包括三种风格:普通环...

ProgressView是一个继承Progressbar的进度视图,目前实现了带数字进度的水平进度条以及圆形进度条,圆形进度条包括三种风格:普通环形进度,内部垂直填充进度以及内部环形填充进度。Demo下载在build.gradle中添加如下引用dependencies{compile'com.white:progressview:1.0.0'}使用1. 布局文件在布局文件中添加Pr...

weixin_40002692的博客 486
上一篇: android 实现textView的走马灯
下一篇: Android关于listview item无响应
走丢的猫
博客等级 码龄15年 4粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值