ProgressBar三种style

本文介绍了三种不同类型的ProgressBar实现方法:普通显示、带进度显示及自定义进度条。通过XML配置和Java代码结合,详细展示了如何设置水平进度条样式,并通过线程更新进度值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

一、普通的ProgressBar
显示如图

<ProgressBar
        android:id="@+id/pbNormal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />

二、有进度的ProgressBar

 

 

xml:设置style,Horizontal
<ProgressBar
       android:id="@+id/progress"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       style="@style/Widget.AppCompat.ProgressBar.Horizontal"
       />
设置进度java文件
        final ProgressBar  bar= (ProgressBar) findViewById(R.id.progress);
        final TextView textView= (TextView) findViewById(R.id.tvProgress);
        new Thread(){
            @Override
            public void run() {
                int i=0;
                while(i<100){
                    i++;
                    try {
                        Thread.sleep(80);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    final int j=i;
                    bar.setProgress(i);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            textView.setText(j+"%");
                        }
                    });
                }
            }
        }.start();
链接:https://www.jianshu.com/p/3e3bcadf90ea
三、自定义有进度ProgressBar
 
progressBar进度条有两个部分组成,背景图形加载进度图形,使用<layer-list>标签,分别用backgroundprogress作为两个部分的id值,背景图形使用<shape>加载进度图形还需要用<clip>标签对图形<shape>标签进行包裹;

 

res下的drawable文件夹下,创建样式
custom_progress.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background">
        <shape android:shape="rectangle">
        <corners android:radius="5dp"/>
        <gradient android:startColor="#fff"
                  android:endColor="#fff"/>
        </shape>
    </item>
    <item android:id="@android:id/progress">
        <clip><!--可裁剪对象-->
            <shape android:shape="rectangle">
            <corners android:radius="5dp"/>
            <gradient android:angle="45" 
                      android:startColor="#f00"
                      android:endColor="#f90"/>
            </shape>
        </clip>
    </item>
</layer-list>
布局xml,需要指定ProgressBar的style
    <ProgressBar
        android:id="@+id/progressSelf"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/Widget.AppCompat.ProgressBar.Horizontal"
        android:progressDrawable="@drawable/custom_progress"
        />
    <TextView
        android:id="@+id/tvProgress"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
设置进度java文件
        final ProgressBar bar = (ProgressBar) findViewById(R.id.progressSelf);
        final TextView textView= (TextView) findViewById(R.id.tvProgress);
        new Thread(){
            @Override
            public void run() {
                int i=0;
                while(i<100){
                    i++;
                    try {
                        Thread.sleep(80);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    final int j=i;
                    bar.setProgress(i);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            textView.setText(j+"%");
                        }
                    });
                }
            }
        }.start();


链接:https://www.jianshu.com/p/3e3bcadf90ea
 

转载于:https://www.cnblogs.com/zhanghongxian666/p/10584075.html

<think>好的,我现在需要帮助用户了解如何在HandyControl中定义ProgressBar的样式。用户之前已经询问过ProgressBar的基本使用和一些高级特性,现在他们想进一步自定义样式。我需要结合用户提供的引用和之前的回答来组织内容。首先,引用[1]提到了如何在XAML中引入HandyControl的命名空间,这是基础步骤,必须包括在样式中。引用[2]展示了如何修改Button的样式,这可能对定义ProgressBar样式有参考价值,因为都是通过Style元素和Setter来设置的。引用[3]介绍了HandyControl的整体功能,特别是高度可定制的特点,这提示我强调样式自定义的灵活性。用户之前的问题中,已经涉及了ProgressBar的不同样式,比如环形进度条和颜色定制。现在需要更深入地讲解如何自定义样式,可能需要覆盖修改现有样式或创建全新样式。我需要分步骤解释:首先是基础样式修改,比如颜色、尺寸;然后是高级定制,比如模板和形状;接着是状态切换,可能使用预设的状态样式;最后是动态样式,比如触发器。同时,可能需要提到如何通过ControlTemplate彻底改变外观,比如将矩形条改为圆形或其他形状。要注意引用相关部分,比如在修改样式时引用[2]中的Setter使用,或者在创建新模板时引用[3]中的可定制性。同时,用户可能对如何应用这些样式到不同的ProgressBar类型(如环形)有疑问,需要分开说明。最后,生成相关问题需要考虑用户可能的后续需求,比如如何实现渐变、处理性能问题,或者更复杂的交互事件,这些都是之前问题中提到的相关点。</think>在HandyControl中定义ProgressBar样式可通过以下方法实现,结合原生效能和高度定制化特性: ### 一、基础样式修改 1. **直接属性设置**: ```xml <hc:ProgressBar Value="60" Height="25" hc:ProgressBar.TrackBackground="#E0E0E0" hc:ProgressBar.IndicatorBrush="#4CAF50" hc:ProgressBar.ProgressStyle="HCProgressBarStyle.Single"/> ``` 通过附加属性直接修改轨道背景色(TrackBackground)和进度指示色(IndicatorBrush)[^2] 2. **全局样式继承**: ```xml <Style TargetType="hc:ProgressBar" BasedOn="{StaticResource ProgressBarPrimary}"> <Setter Property="Margin" Value="10"/> <Setter Property="hc:ProgressBar.IndicatorCornerRadius" Value="5"/> </Style> ``` 继承预设样式并修改边距和指示条圆角半径[^3] ### 二、高级模板定制 1. **重写ControlTemplate**: ```xml <Style x:Key="GradientProgressBar" TargetType="hc:ProgressBar"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="hc:ProgressBar"> <Border Background="{TemplateBinding TrackBackground}" CornerRadius="3"> <Grid> <Rectangle x:Name="Indicator" HorizontalAlignment="Left" Fill="{TemplateBinding IndicatorBrush}"> <Rectangle.RenderTransform> <ScaleTransform ScaleX="0"/> </Rectangle.RenderTransform> </Rectangle> <TextBlock Text="{Binding Value, RelativeSource={RelativeSource TemplatedParent}, StringFormat={}{0}%}" HorizontalAlignment="Center" VerticalAlignment="Center"/> </Grid> </Border> <ControlTemplate.Triggers> <Trigger Property="IsIndeterminate" Value="True"> <!-- 定义动画 --> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> ``` 通过定义新的ControlTemplate实现带百分比文本的渐变进度条[^3] ### 三、状态样式切换 ```csharp // 代码中切换预设状态 ProgressBar.SetState(myProgressBar, ProgressState.Warning); // XAML中绑定状态 <hc:ProgressBar hc:ProgressBar.State="{Binding ProgressState}"/> ``` 使用预设的六种状态色(Primary/Success/Warning等)快速切换外观[^3] ### 四、环形进度条定制 ```xml <Style TargetType="hc:CircleProgressBar"> <Setter Property="RingThickness" Value="8"/> <Setter Property="TextFormat" Value="{}{0:F0}%"/> <Setter Property="ShowText" Value="True"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate> <!-- 自定义Path绘制逻辑 --> <Path Stroke="{TemplateBinding IndicatorBrush}" StrokeDashArray="{Binding Value, Converter={StaticResource ProgressConverter}}"/> </ControlTemplate> </Setter.Value> </Setter> </Style> ``` 通过StrokeDashArray实现平滑的环形进度动画[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值