pub struct ImageView { /* private fields */ }Expand description
An ImageView displays images
Implementations§
Source§impl ImageView
impl ImageView
Sourcepub fn new(activity: &mut Activity, parent: Option<i64>) -> Result<Self>
pub fn new(activity: &mut Activity, parent: Option<i64>) -> Result<Self>
Create a new ImageView
Sourcepub fn view(&self) -> &View
pub fn view(&self) -> &View
Get the underlying View
Examples found in repository?
examples/image_demo_v2.rs (line 37)
8fn main() -> Result<()> {
9 println!("=== ImageView 图像显示演示 (新库版本) ===\n");
10
11 // 创建 Activity(全屏模式)
12 let mut activity = Activity::new(false)?;
13 println!("✓ 连接建立\n");
14
15 // 创建 NestedScrollView 作为根布局(支持滚动)
16 let scroll = activity.create_nested_scroll_view(None)?;
17
18 // 创建主布局(放在 ScrollView 内)
19 let layout = activity.create_linear_layout(Some(scroll.id()))?;
20 layout.view().set_margin(&mut activity, 15)?;
21
22 // 创建标题
23 let title = activity.create_text_view("🖼️ 图片显示测试", Some(layout.id()))?;
24 title.set_text_size(&mut activity, 26)?;
25 title.view().set_margin(&mut activity, 10)?;
26 title.view().set_height_wrap_content(&mut activity)?;
27 title.view().set_linear_layout_params(&mut activity, 0, None)?;
28
29 // 创建说明
30 let desc = activity.create_text_view("显示一个小的测试图片", Some(layout.id()))?;
31 desc.view().set_margin(&mut activity, 5)?;
32 desc.view().set_height_wrap_content(&mut activity)?;
33 desc.view().set_linear_layout_params(&mut activity, 0, None)?;
34
35 // 创建 ImageView
36 let image_view = activity.create_image_view(Some(layout.id()))?;
37 image_view.view().set_margin(&mut activity, 10)?;
38 // ImageView 使用权重占据主要空间
39 image_view.view().set_linear_layout_params(&mut activity, 1, None)?;
40
41 // 创建一个简单的 1x1 红色像素 PNG 图片(base64编码)
42 // 这是一个最小的有效PNG文件
43 let red_pixel_png_base64 = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg==";
44
45 // 设置图片
46 image_view.set_image(&mut activity, red_pixel_png_base64)?;
47
48 // 创建状态显示
49 let status = activity.create_text_view("✅ 图片已加载", Some(layout.id()))?;
50 status.view().set_margin(&mut activity, 10)?;
51 status.view().set_height_wrap_content(&mut activity)?;
52 status.view().set_linear_layout_params(&mut activity, 0, None)?;
53 status.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
54
55 // 创建按钮布局
56 let button_layout = activity.create_linear_layout_horizontal(Some(layout.id()))?;
57 button_layout.view().set_margin(&mut activity, 10)?;
58 button_layout.view().set_height_wrap_content(&mut activity)?;
59 button_layout.view().set_linear_layout_params(&mut activity, 0, None)?;
60
61 // 红色图片按钮
62 let red_btn = activity.create_button("🔴 红色", Some(button_layout.id()))?;
63 red_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
64
65 // 绿色图片按钮
66 let green_btn = activity.create_button("🟢 绿色", Some(button_layout.id()))?;
67 green_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
68
69 // 蓝色图片按钮
70 let blue_btn = activity.create_button("🔵 蓝色", Some(button_layout.id()))?;
71 blue_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
72
73 println!("✓ 界面创建完成\n");
74 println!("━━━━━━━━━━━━━━━━━━━━━━");
75 println!("提示:");
76 println!(" • 点击按钮切换不同颜色的图片");
77 println!(" • 图片会自动缩放填充区域");
78 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
79
80 // 预定义几个不同颜色的1x1像素PNG图片(base64)
81 // 红色像素
82 let red_png = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg==";
83 // 绿色像素
84 let green_png = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M/wHwAEBgIApD5fRAAAAABJRU5ErkJggg==";
85 // 蓝色像素
86 let blue_png = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPj/HwADBwIAMCbHYQAAAABJRU5ErkJggg==";
87
88 // 事件循环
89 loop {
90 let event = read_message(activity.event_stream())?;
91 let event_type = event["type"].as_str().unwrap_or("");
92 let event_value = &event["value"];
93
94 match event_type {
95 "destroy" => {
96 // Activity 已被系统销毁,直接退出即可
97 println!("\n✓ Activity 已关闭");
98 return Ok(());
99 },
100 "click" => {
101 let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
102
103 if clicked_id == red_btn.id() {
104 println!("🔴 切换到红色图片");
105 image_view.set_image(&mut activity, red_png)?;
106 status.set_text(&mut activity, "🔴 红色图片")?;
107 status.set_text_color(&mut activity, 0xFFF44336u32 as i32)?;
108 } else if clicked_id == green_btn.id() {
109 println!("🟢 切换到绿色图片");
110 image_view.set_image(&mut activity, green_png)?;
111 status.set_text(&mut activity, "🟢 绿色图片")?;
112 status.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
113 } else if clicked_id == blue_btn.id() {
114 println!("🔵 切换到蓝色图片");
115 image_view.set_image(&mut activity, blue_png)?;
116 status.set_text(&mut activity, "🔵 蓝色图片")?;
117 status.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
118 }
119 },
120 _ => {}
121 }
122 }
123}Sourcepub fn set_image(&self, activity: &mut Activity, img_base64: &str) -> Result<()>
pub fn set_image(&self, activity: &mut Activity, img_base64: &str) -> Result<()>
Set image from base64 encoded string
The image should be base64 encoded PNG or JPEG data.
You can use the base64 crate to encode image bytes.
Examples found in repository?
examples/image_demo_v2.rs (line 46)
8fn main() -> Result<()> {
9 println!("=== ImageView 图像显示演示 (新库版本) ===\n");
10
11 // 创建 Activity(全屏模式)
12 let mut activity = Activity::new(false)?;
13 println!("✓ 连接建立\n");
14
15 // 创建 NestedScrollView 作为根布局(支持滚动)
16 let scroll = activity.create_nested_scroll_view(None)?;
17
18 // 创建主布局(放在 ScrollView 内)
19 let layout = activity.create_linear_layout(Some(scroll.id()))?;
20 layout.view().set_margin(&mut activity, 15)?;
21
22 // 创建标题
23 let title = activity.create_text_view("🖼️ 图片显示测试", Some(layout.id()))?;
24 title.set_text_size(&mut activity, 26)?;
25 title.view().set_margin(&mut activity, 10)?;
26 title.view().set_height_wrap_content(&mut activity)?;
27 title.view().set_linear_layout_params(&mut activity, 0, None)?;
28
29 // 创建说明
30 let desc = activity.create_text_view("显示一个小的测试图片", Some(layout.id()))?;
31 desc.view().set_margin(&mut activity, 5)?;
32 desc.view().set_height_wrap_content(&mut activity)?;
33 desc.view().set_linear_layout_params(&mut activity, 0, None)?;
34
35 // 创建 ImageView
36 let image_view = activity.create_image_view(Some(layout.id()))?;
37 image_view.view().set_margin(&mut activity, 10)?;
38 // ImageView 使用权重占据主要空间
39 image_view.view().set_linear_layout_params(&mut activity, 1, None)?;
40
41 // 创建一个简单的 1x1 红色像素 PNG 图片(base64编码)
42 // 这是一个最小的有效PNG文件
43 let red_pixel_png_base64 = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg==";
44
45 // 设置图片
46 image_view.set_image(&mut activity, red_pixel_png_base64)?;
47
48 // 创建状态显示
49 let status = activity.create_text_view("✅ 图片已加载", Some(layout.id()))?;
50 status.view().set_margin(&mut activity, 10)?;
51 status.view().set_height_wrap_content(&mut activity)?;
52 status.view().set_linear_layout_params(&mut activity, 0, None)?;
53 status.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
54
55 // 创建按钮布局
56 let button_layout = activity.create_linear_layout_horizontal(Some(layout.id()))?;
57 button_layout.view().set_margin(&mut activity, 10)?;
58 button_layout.view().set_height_wrap_content(&mut activity)?;
59 button_layout.view().set_linear_layout_params(&mut activity, 0, None)?;
60
61 // 红色图片按钮
62 let red_btn = activity.create_button("🔴 红色", Some(button_layout.id()))?;
63 red_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
64
65 // 绿色图片按钮
66 let green_btn = activity.create_button("🟢 绿色", Some(button_layout.id()))?;
67 green_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
68
69 // 蓝色图片按钮
70 let blue_btn = activity.create_button("🔵 蓝色", Some(button_layout.id()))?;
71 blue_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
72
73 println!("✓ 界面创建完成\n");
74 println!("━━━━━━━━━━━━━━━━━━━━━━");
75 println!("提示:");
76 println!(" • 点击按钮切换不同颜色的图片");
77 println!(" • 图片会自动缩放填充区域");
78 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
79
80 // 预定义几个不同颜色的1x1像素PNG图片(base64)
81 // 红色像素
82 let red_png = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg==";
83 // 绿色像素
84 let green_png = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M/wHwAEBgIApD5fRAAAAABJRU5ErkJggg==";
85 // 蓝色像素
86 let blue_png = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPj/HwADBwIAMCbHYQAAAABJRU5ErkJggg==";
87
88 // 事件循环
89 loop {
90 let event = read_message(activity.event_stream())?;
91 let event_type = event["type"].as_str().unwrap_or("");
92 let event_value = &event["value"];
93
94 match event_type {
95 "destroy" => {
96 // Activity 已被系统销毁,直接退出即可
97 println!("\n✓ Activity 已关闭");
98 return Ok(());
99 },
100 "click" => {
101 let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
102
103 if clicked_id == red_btn.id() {
104 println!("🔴 切换到红色图片");
105 image_view.set_image(&mut activity, red_png)?;
106 status.set_text(&mut activity, "🔴 红色图片")?;
107 status.set_text_color(&mut activity, 0xFFF44336u32 as i32)?;
108 } else if clicked_id == green_btn.id() {
109 println!("🟢 切换到绿色图片");
110 image_view.set_image(&mut activity, green_png)?;
111 status.set_text(&mut activity, "🟢 绿色图片")?;
112 status.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
113 } else if clicked_id == blue_btn.id() {
114 println!("🔵 切换到蓝色图片");
115 image_view.set_image(&mut activity, blue_png)?;
116 status.set_text(&mut activity, "🔵 蓝色图片")?;
117 status.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
118 }
119 },
120 _ => {}
121 }
122 }
123}Auto Trait Implementations§
impl Freeze for ImageView
impl RefUnwindSafe for ImageView
impl Send for ImageView
impl Sync for ImageView
impl Unpin for ImageView
impl UnwindSafe for ImageView
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more