1use termux_gui::{Activity, Result};
6use termux_gui::connection::read_message;
7use std::time::Duration;
8use std::thread;
9
10fn main() -> Result<()> {
11 println!("=== ProgressBar 进度条演示 (新库版本) ===\n");
12
13 let mut activity = Activity::new(false)?;
15 println!("✓ 连接建立\n");
16
17 let scroll = activity.create_nested_scroll_view(None)?;
19
20 let layout = activity.create_linear_layout(Some(scroll.id()))?;
22 layout.view().set_margin(&mut activity, 15)?;
23
24 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 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 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 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 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 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 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 let mut progress1_value = 0;
120 let mut progress2_value = 0;
121
122 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 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 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 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 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 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 println!("▶️ 开始自动演示...");
178 progress1_value = 0;
179 progress2_value = 0;
180
181 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 thread::sleep(Duration::from_millis(300));
203 }
204
205 println!("✅ 自动演示完成!");
206 }
207 },
208 _ => {}
209 }
210 }
211}