ProgressBar

Struct ProgressBar 

Source
pub struct ProgressBar { /* private fields */ }
Expand description

A ProgressBar displays progress from 0 to 100

Implementations§

Source§

impl ProgressBar

Source

pub fn new(activity: &mut Activity, parent: Option<i64>) -> Result<Self>

Create a new ProgressBar

Source

pub fn id(&self) -> i64

Get the view ID

Source

pub fn view(&self) -> &View

Get the underlying View

Examples found in repository?
examples/progress_demo_v2.rs (line 44)
10fn main() -> Result<()> {
11    println!("=== ProgressBar 进度条演示 (新库版本) ===\n");
12    
13    // 创建 Activity(全屏模式)
14    let mut activity = Activity::new(false)?;
15    println!("✓ 连接建立\n");
16    
17    // 创建 NestedScrollView 作为根布局(支持滚动)
18    let scroll = activity.create_nested_scroll_view(None)?;
19    
20    // 创建主布局(放在 ScrollView 内)
21    let layout = activity.create_linear_layout(Some(scroll.id()))?;
22    layout.view().set_margin(&mut activity, 15)?;
23    
24    // 创建标题
25    let title = activity.create_text_view("📊 进度条演示", Some(layout.id()))?;
26    title.set_text_size(&mut activity, 26)?;
27    title.view().set_margin(&mut activity, 10)?;
28    title.view().set_height_wrap_content(&mut activity)?;
29    title.view().set_linear_layout_params(&mut activity, 0, None)?;
30    
31    // 创建说明
32    let desc = activity.create_text_view("点击按钮控制进度", Some(layout.id()))?;
33    desc.view().set_margin(&mut activity, 5)?;
34    desc.view().set_height_wrap_content(&mut activity)?;
35    desc.view().set_linear_layout_params(&mut activity, 0, None)?;
36    
37    // 创建 ProgressBar 1 - 主进度条
38    let label1 = activity.create_text_view("主任务进度:", Some(layout.id()))?;
39    label1.view().set_margin(&mut activity, 10)?;
40    label1.view().set_height_wrap_content(&mut activity)?;
41    label1.view().set_linear_layout_params(&mut activity, 0, None)?;
42    
43    let progress1 = activity.create_progress_bar(Some(layout.id()))?;
44    progress1.view().set_margin(&mut activity, 10)?;
45    progress1.view().set_width_match_parent(&mut activity)?;
46    progress1.view().set_height_wrap_content(&mut activity)?;
47    progress1.view().set_linear_layout_params(&mut activity, 0, None)?;
48    progress1.set_progress(&mut activity, 0)?;
49    
50    let progress1_text = activity.create_text_view("0%", Some(layout.id()))?;
51    progress1_text.view().set_margin(&mut activity, 5)?;
52    progress1_text.view().set_height_wrap_content(&mut activity)?;
53    progress1_text.view().set_linear_layout_params(&mut activity, 0, None)?;
54    progress1_text.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
55    
56    // 创建 ProgressBar 2 - 次要进度条
57    let label2 = activity.create_text_view("下载进度:", Some(layout.id()))?;
58    label2.view().set_margin(&mut activity, 10)?;
59    label2.view().set_height_wrap_content(&mut activity)?;
60    label2.view().set_linear_layout_params(&mut activity, 0, None)?;
61    
62    let progress2 = activity.create_progress_bar(Some(layout.id()))?;
63    progress2.view().set_margin(&mut activity, 10)?;
64    progress2.view().set_width_match_parent(&mut activity)?;
65    progress2.view().set_height_wrap_content(&mut activity)?;
66    progress2.view().set_linear_layout_params(&mut activity, 0, None)?;
67    progress2.set_progress(&mut activity, 0)?;
68    
69    let progress2_text = activity.create_text_view("0%", Some(layout.id()))?;
70    progress2_text.view().set_margin(&mut activity, 5)?;
71    progress2_text.view().set_height_wrap_content(&mut activity)?;
72    progress2_text.view().set_linear_layout_params(&mut activity, 0, None)?;
73    progress2_text.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
74    
75    // 创建分隔线
76    let divider = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
77    divider.view().set_margin(&mut activity, 10)?;
78    divider.view().set_height_wrap_content(&mut activity)?;
79    divider.view().set_linear_layout_params(&mut activity, 0, None)?;
80    
81    // 创建按钮布局
82    let button_layout1 = activity.create_linear_layout_horizontal(Some(layout.id()))?;
83    button_layout1.view().set_margin(&mut activity, 10)?;
84    button_layout1.view().set_height_wrap_content(&mut activity)?;
85    button_layout1.view().set_linear_layout_params(&mut activity, 0, None)?;
86    
87    let inc_btn = activity.create_button("➕ 增加", Some(button_layout1.id()))?;
88    inc_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
89    
90    let dec_btn = activity.create_button("➖ 减少", Some(button_layout1.id()))?;
91    dec_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
92    
93    let reset_btn = activity.create_button("🔄 重置", Some(button_layout1.id()))?;
94    reset_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
95    
96    // 第二行按钮
97    let button_layout2 = activity.create_linear_layout_horizontal(Some(layout.id()))?;
98    button_layout2.view().set_margin(&mut activity, 10)?;
99    button_layout2.view().set_height_wrap_content(&mut activity)?;
100    button_layout2.view().set_linear_layout_params(&mut activity, 0, None)?;
101    
102    let auto_btn = activity.create_button("▶️ 自动演示", Some(button_layout2.id()))?;
103    auto_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
104    
105    let complete_btn = activity.create_button("✅ 完成", Some(button_layout2.id()))?;
106    complete_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
107    
108    println!("✓ 界面创建完成\n");
109    println!("━━━━━━━━━━━━━━━━━━━━━━");
110    println!("提示:");
111    println!("  • ➕ 增加 - 进度 +10%");
112    println!("  • ➖ 减少 - 进度 -10%");
113    println!("  • 🔄 重置 - 进度归零");
114    println!("  • ▶️ 自动演示 - 模拟加载过程");
115    println!("  • ✅ 完成 - 进度设为100%");
116    println!("━━━━━━━━━━━━━━━━━━━━━━\n");
117    
118    // 进度状态
119    let mut progress1_value = 0;
120    let mut progress2_value = 0;
121    
122    // 事件循环
123    loop {
124        let event = read_message(activity.event_stream())?;
125        let event_type = event["type"].as_str().unwrap_or("");
126        let event_value = &event["value"];
127        
128        match event_type {
129            "destroy" => {
130                // Activity 已被系统销毁,直接退出即可
131                println!("\n✓ Activity 已关闭");
132                return Ok(());
133            },
134            "click" => {
135                let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
136                
137                if clicked_id == inc_btn.id() {
138                    // 增加进度
139                    progress1_value = (progress1_value + 10).min(100);
140                    progress1.set_progress(&mut activity, progress1_value)?;
141                    progress1_text.set_text(&mut activity, &format!("{}%", progress1_value))?;
142                    println!("➕ 进度: {}%", progress1_value);
143                    
144                } else if clicked_id == dec_btn.id() {
145                    // 减少进度
146                    progress1_value = (progress1_value - 10).max(0);
147                    progress1.set_progress(&mut activity, progress1_value)?;
148                    progress1_text.set_text(&mut activity, &format!("{}%", progress1_value))?;
149                    println!("➖ 进度: {}%", progress1_value);
150                    
151                } else if clicked_id == reset_btn.id() {
152                    // 重置
153                    progress1_value = 0;
154                    progress2_value = 0;
155                    progress1.set_progress(&mut activity, 0)?;
156                    progress2.set_progress(&mut activity, 0)?;
157                    progress1_text.set_text(&mut activity, "0%")?;
158                    progress2_text.set_text(&mut activity, "0%")?;
159                    progress1_text.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
160                    progress2_text.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
161                    println!("🔄 进度已重置");
162                    
163                } else if clicked_id == complete_btn.id() {
164                    // 完成
165                    progress1_value = 100;
166                    progress2_value = 100;
167                    progress1.set_progress(&mut activity, 100)?;
168                    progress2.set_progress(&mut activity, 100)?;
169                    progress1_text.set_text(&mut activity, "100% ✓")?;
170                    progress2_text.set_text(&mut activity, "100% ✓")?;
171                    progress1_text.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
172                    progress2_text.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
173                    println!("✅ 任务完成!");
174                    
175                } else if clicked_id == auto_btn.id() {
176                    // 自动演示 - 模拟加载过程
177                    println!("▶️ 开始自动演示...");
178                    progress1_value = 0;
179                    progress2_value = 0;
180                    
181                    // 模拟两个进度条同时加载
182                    for i in 0..=10 {
183                        progress1_value = i * 10;
184                        progress2_value = i * 10;
185                        
186                        progress1.set_progress(&mut activity, progress1_value)?;
187                        progress2.set_progress(&mut activity, progress2_value)?;
188                        
189                        progress1_text.set_text(&mut activity, &format!("{}%", progress1_value))?;
190                        progress2_text.set_text(&mut activity, &format!("{}%", progress2_value))?;
191                        
192                        if i == 10 {
193                            progress1_text.set_text(&mut activity, "100% ✓")?;
194                            progress2_text.set_text(&mut activity, "100% ✓")?;
195                            progress1_text.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
196                            progress2_text.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
197                        }
198                        
199                        println!("   进度: {}%", progress1_value);
200                        
201                        // 延迟一下,让用户看到进度变化
202                        thread::sleep(Duration::from_millis(300));
203                    }
204                    
205                    println!("✅ 自动演示完成!");
206                }
207            },
208            _ => {}
209        }
210    }
211}
Source

pub fn set_progress(&self, activity: &mut Activity, progress: i32) -> Result<()>

Set the progress value (0-100)

The progress must be an integer from 0 to 100 (inclusive).

Examples found in repository?
examples/progress_demo_v2.rs (line 48)
10fn main() -> Result<()> {
11    println!("=== ProgressBar 进度条演示 (新库版本) ===\n");
12    
13    // 创建 Activity(全屏模式)
14    let mut activity = Activity::new(false)?;
15    println!("✓ 连接建立\n");
16    
17    // 创建 NestedScrollView 作为根布局(支持滚动)
18    let scroll = activity.create_nested_scroll_view(None)?;
19    
20    // 创建主布局(放在 ScrollView 内)
21    let layout = activity.create_linear_layout(Some(scroll.id()))?;
22    layout.view().set_margin(&mut activity, 15)?;
23    
24    // 创建标题
25    let title = activity.create_text_view("📊 进度条演示", Some(layout.id()))?;
26    title.set_text_size(&mut activity, 26)?;
27    title.view().set_margin(&mut activity, 10)?;
28    title.view().set_height_wrap_content(&mut activity)?;
29    title.view().set_linear_layout_params(&mut activity, 0, None)?;
30    
31    // 创建说明
32    let desc = activity.create_text_view("点击按钮控制进度", Some(layout.id()))?;
33    desc.view().set_margin(&mut activity, 5)?;
34    desc.view().set_height_wrap_content(&mut activity)?;
35    desc.view().set_linear_layout_params(&mut activity, 0, None)?;
36    
37    // 创建 ProgressBar 1 - 主进度条
38    let label1 = activity.create_text_view("主任务进度:", Some(layout.id()))?;
39    label1.view().set_margin(&mut activity, 10)?;
40    label1.view().set_height_wrap_content(&mut activity)?;
41    label1.view().set_linear_layout_params(&mut activity, 0, None)?;
42    
43    let progress1 = activity.create_progress_bar(Some(layout.id()))?;
44    progress1.view().set_margin(&mut activity, 10)?;
45    progress1.view().set_width_match_parent(&mut activity)?;
46    progress1.view().set_height_wrap_content(&mut activity)?;
47    progress1.view().set_linear_layout_params(&mut activity, 0, None)?;
48    progress1.set_progress(&mut activity, 0)?;
49    
50    let progress1_text = activity.create_text_view("0%", Some(layout.id()))?;
51    progress1_text.view().set_margin(&mut activity, 5)?;
52    progress1_text.view().set_height_wrap_content(&mut activity)?;
53    progress1_text.view().set_linear_layout_params(&mut activity, 0, None)?;
54    progress1_text.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
55    
56    // 创建 ProgressBar 2 - 次要进度条
57    let label2 = activity.create_text_view("下载进度:", Some(layout.id()))?;
58    label2.view().set_margin(&mut activity, 10)?;
59    label2.view().set_height_wrap_content(&mut activity)?;
60    label2.view().set_linear_layout_params(&mut activity, 0, None)?;
61    
62    let progress2 = activity.create_progress_bar(Some(layout.id()))?;
63    progress2.view().set_margin(&mut activity, 10)?;
64    progress2.view().set_width_match_parent(&mut activity)?;
65    progress2.view().set_height_wrap_content(&mut activity)?;
66    progress2.view().set_linear_layout_params(&mut activity, 0, None)?;
67    progress2.set_progress(&mut activity, 0)?;
68    
69    let progress2_text = activity.create_text_view("0%", Some(layout.id()))?;
70    progress2_text.view().set_margin(&mut activity, 5)?;
71    progress2_text.view().set_height_wrap_content(&mut activity)?;
72    progress2_text.view().set_linear_layout_params(&mut activity, 0, None)?;
73    progress2_text.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
74    
75    // 创建分隔线
76    let divider = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
77    divider.view().set_margin(&mut activity, 10)?;
78    divider.view().set_height_wrap_content(&mut activity)?;
79    divider.view().set_linear_layout_params(&mut activity, 0, None)?;
80    
81    // 创建按钮布局
82    let button_layout1 = activity.create_linear_layout_horizontal(Some(layout.id()))?;
83    button_layout1.view().set_margin(&mut activity, 10)?;
84    button_layout1.view().set_height_wrap_content(&mut activity)?;
85    button_layout1.view().set_linear_layout_params(&mut activity, 0, None)?;
86    
87    let inc_btn = activity.create_button("➕ 增加", Some(button_layout1.id()))?;
88    inc_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
89    
90    let dec_btn = activity.create_button("➖ 减少", Some(button_layout1.id()))?;
91    dec_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
92    
93    let reset_btn = activity.create_button("🔄 重置", Some(button_layout1.id()))?;
94    reset_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
95    
96    // 第二行按钮
97    let button_layout2 = activity.create_linear_layout_horizontal(Some(layout.id()))?;
98    button_layout2.view().set_margin(&mut activity, 10)?;
99    button_layout2.view().set_height_wrap_content(&mut activity)?;
100    button_layout2.view().set_linear_layout_params(&mut activity, 0, None)?;
101    
102    let auto_btn = activity.create_button("▶️ 自动演示", Some(button_layout2.id()))?;
103    auto_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
104    
105    let complete_btn = activity.create_button("✅ 完成", Some(button_layout2.id()))?;
106    complete_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
107    
108    println!("✓ 界面创建完成\n");
109    println!("━━━━━━━━━━━━━━━━━━━━━━");
110    println!("提示:");
111    println!("  • ➕ 增加 - 进度 +10%");
112    println!("  • ➖ 减少 - 进度 -10%");
113    println!("  • 🔄 重置 - 进度归零");
114    println!("  • ▶️ 自动演示 - 模拟加载过程");
115    println!("  • ✅ 完成 - 进度设为100%");
116    println!("━━━━━━━━━━━━━━━━━━━━━━\n");
117    
118    // 进度状态
119    let mut progress1_value = 0;
120    let mut progress2_value = 0;
121    
122    // 事件循环
123    loop {
124        let event = read_message(activity.event_stream())?;
125        let event_type = event["type"].as_str().unwrap_or("");
126        let event_value = &event["value"];
127        
128        match event_type {
129            "destroy" => {
130                // Activity 已被系统销毁,直接退出即可
131                println!("\n✓ Activity 已关闭");
132                return Ok(());
133            },
134            "click" => {
135                let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
136                
137                if clicked_id == inc_btn.id() {
138                    // 增加进度
139                    progress1_value = (progress1_value + 10).min(100);
140                    progress1.set_progress(&mut activity, progress1_value)?;
141                    progress1_text.set_text(&mut activity, &format!("{}%", progress1_value))?;
142                    println!("➕ 进度: {}%", progress1_value);
143                    
144                } else if clicked_id == dec_btn.id() {
145                    // 减少进度
146                    progress1_value = (progress1_value - 10).max(0);
147                    progress1.set_progress(&mut activity, progress1_value)?;
148                    progress1_text.set_text(&mut activity, &format!("{}%", progress1_value))?;
149                    println!("➖ 进度: {}%", progress1_value);
150                    
151                } else if clicked_id == reset_btn.id() {
152                    // 重置
153                    progress1_value = 0;
154                    progress2_value = 0;
155                    progress1.set_progress(&mut activity, 0)?;
156                    progress2.set_progress(&mut activity, 0)?;
157                    progress1_text.set_text(&mut activity, "0%")?;
158                    progress2_text.set_text(&mut activity, "0%")?;
159                    progress1_text.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
160                    progress2_text.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
161                    println!("🔄 进度已重置");
162                    
163                } else if clicked_id == complete_btn.id() {
164                    // 完成
165                    progress1_value = 100;
166                    progress2_value = 100;
167                    progress1.set_progress(&mut activity, 100)?;
168                    progress2.set_progress(&mut activity, 100)?;
169                    progress1_text.set_text(&mut activity, "100% ✓")?;
170                    progress2_text.set_text(&mut activity, "100% ✓")?;
171                    progress1_text.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
172                    progress2_text.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
173                    println!("✅ 任务完成!");
174                    
175                } else if clicked_id == auto_btn.id() {
176                    // 自动演示 - 模拟加载过程
177                    println!("▶️ 开始自动演示...");
178                    progress1_value = 0;
179                    progress2_value = 0;
180                    
181                    // 模拟两个进度条同时加载
182                    for i in 0..=10 {
183                        progress1_value = i * 10;
184                        progress2_value = i * 10;
185                        
186                        progress1.set_progress(&mut activity, progress1_value)?;
187                        progress2.set_progress(&mut activity, progress2_value)?;
188                        
189                        progress1_text.set_text(&mut activity, &format!("{}%", progress1_value))?;
190                        progress2_text.set_text(&mut activity, &format!("{}%", progress2_value))?;
191                        
192                        if i == 10 {
193                            progress1_text.set_text(&mut activity, "100% ✓")?;
194                            progress2_text.set_text(&mut activity, "100% ✓")?;
195                            progress1_text.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
196                            progress2_text.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
197                        }
198                        
199                        println!("   进度: {}%", progress1_value);
200                        
201                        // 延迟一下,让用户看到进度变化
202                        thread::sleep(Duration::from_millis(300));
203                    }
204                    
205                    println!("✅ 自动演示完成!");
206                }
207            },
208            _ => {}
209        }
210    }
211}

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V