Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6642579
  • 博文数量: 915
  • 博客积分: 17977
  • 博客等级: 上将
  • 技术积分: 8846
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-26 09:59
个人简介

一个好老好老的老程序员了。

文章分类

全部博文(915)

文章存档

2022年(9)

2021年(13)

2020年(10)

2019年(40)

2018年(88)

2017年(130)

2015年(5)

2014年(12)

2013年(41)

2012年(36)

2011年(272)

2010年(1)

2009年(53)

2008年(65)

2007年(47)

2006年(81)

2005年(12)

分类: Android平台

2019-07-20 08:13:02

滑块颜色选择
这是一个名为RgbSliders的程序,它包含三个Slider元素,用于选择Color的红色,绿色和蓝色组件。 Slider的隐式样式将Maximum值设置为255:

点击(此处)折叠或打开

  1. <ContentPage xmlns=""
  2.              xmlns:x=""
  3.              x:Class="RgbSliders.RgbSlidersPage">
  4.     <ContentPage.Padding>
  5.         <OnPlatform x:TypeArguments="Thickness"
  6.                     iOS="10, 20, 10, 10"
  7.                     Android="10, 0, 10, 10"
  8.                     WinPhone="10, 0, 10, 10" />
  9.     </ContentPage.Padding>
  10.     <StackLayout>
  11.         <StackLayout.Resources>
  12.             <ResourceDictionary>
  13.                 <Style TargetType="Slider">
  14.                     <Setter Property="Maximum" Value="255" />
  15.                 </Style>
  16.                 <Style TargetType="Label">
  17.                     <Setter Property="FontSize" Value="Large" />
  18.                     <Setter Property="HorizontalTextAlignment" Value="Center" />
  19.                 </Style>
  20.             </ResourceDictionary>
  21.         </StackLayout.Resources>
  22.         <Slider x:Name="redSlider"
  23.                 ValueChanged="OnSliderValueChanged" />
  24.         <Label x:Name="redLabel" />
  25.         <Slider x:Name="greenSlider"
  26.                 ValueChanged="OnSliderValueChanged" />
  27.         <Label x:Name="greenLabel" />
  28.         <Slider x:Name="blueSlider"
  29.                 ValueChanged="OnSliderValueChanged" />
  30.         <Label x:Name="blueLabel" />
  31.         <BoxView x:Name="boxView"
  32.                  VerticalOptions="FillAndExpand" />
  33.     </StackLayout>
  34. </ContentPage>

Slider元素与三个Label元素交替显示它们的值,StackLay?out以BoxView结束以显示结果颜色。
代码隐藏文件的构造函数将Slider设置初始化为128以获得中灰色。 共享的ValueChanged处理程序检查哪个Slider已更改,因此需要更新哪个Label,然后为BoxView计算新颜色:

点击(此处)折叠或打开

  1. public partial class RgbSlidersPage : ContentPage
  2. {
  3.     public RgbSlidersPage()
  4.     {
  5.         InitializeComponent();
  6.         redSlider.Value = 128;
  7.         greenSlider.Value = 128;
  8.         blueSlider.Value = 128;
  9.     }
  10.     void OnSliderValueChanged(object sender, ValueChangedEventArgs args)
  11.     {
  12.         if (sender == redSlider)
  13.         {
  14.             redLabel.Text = String.Format("Red = {0:X2}", (int)redSlider.Value);
  15.         }
  16.         else if (sender == greenSlider)
  17.         {
  18.             greenLabel.Text = String.Format("Green = {0:X2}", (int)greenSlider.Value);
  19.         }
  20.         else if (sender == blueSlider)
  21.         {
  22.             blueLabel.Text = String.Format("Blue = {0:X2}", (int)blueSlider.Value);
  23.         }
  24.         boxView.Color = Color.FromRgb((int)redSlider.Value,
  25.                                       (int)greenSlider.Value,
  26.                                       (int)blueSlider.Value);
  27.     }
  28. }

严格来说,这里的if和else语句不是必需的。 无论哪个滑块发生变化,代码都可以简单地设置所有三个标签。 事件处理程序无论如何都会访问所有三个滑块以设置新颜色:
2018_09_07_095548
您可以将手机侧向转动,但BoxView会变得更短,特别是在Windows 10移动设备上,其中Slider的垂直高度超出了要求。 在第18章介绍Grid之后,您将看到应用程序如何更轻松地响应方向更改。
以下TextFade程序使用单个Slider来控制AbsoluteLayout中两个Label元素的不透明度和水平位置。 在初始布局中,两个Label元素都位于AbsoluteLayout的左中心,但第二个将其Opacity设置为0:

点击(此处)折叠或打开

  1. <ContentPage xmlns=""
  2.              xmlns:x=""
  3.              x:Class="TextFade.TextFadePage"
  4.              Padding="10, 0, 10, 20">
  5.     <StackLayout>
  6.         <AbsoluteLayout VerticalOptions="CenterAndExpand">
  7.             <Label x:Name="label1"
  8.                    Text="TEXT"
  9.                    FontSize="Large"
  10.                    AbsoluteLayout.LayoutBounds="0, 0.5"
  11.                    AbsoluteLayout.LayoutFlags="PositionProportional" />
  12.  
  13.              <Label x:Name="label2"
  14.                    Text="FADE"
  15.                    FontSize="Large"
  16.                    Opacity="0"
  17.                    AbsoluteLayout.LayoutBounds="0, 0.5"
  18.                    AbsoluteLayout.LayoutFlags="PositionProportional" />
  19.  </AbsoluteLayout>
  20.         <Slider ValueChanged="OnSliderValueChanged" />
  21.  
  22.     </StackLayout>
  23. </ContentPage>

Slider事件处理程序在屏幕上从左向右移动两个Label元素。 比例定位在这里有很大帮助,因为Slider值的范围从0到1,这导致Label元素从屏幕的最左侧到最右侧逐步定位:

点击(此处)折叠或打开

  1. public partial class TextFadePage : ContentPage
  2. {
  3.     public TextFadePage()
  4.     {
  5.         InitializeComponent();
  6.     }
  7.     void OnSliderValueChanged(object sender, ValueChangedEventArgs args)
  8.     {
  9.         AbsoluteLayout.SetLayoutBounds(label1,
  10.             new Rectangle(args.NewValue, 0.5, AbsoluteLayout.AutoSize,
  11.                                               AbsoluteLayout.AutoSize));
  12.         AbsoluteLayout.SetLayoutBounds(label2,
  13.             new Rectangle(args.NewValue, 0.5, AbsoluteLayout.AutoSize,
  14.                                               AbsoluteLayout.AutoSize));
  15.         label1.Opacity = 1 - args.NewValue;
  16.         label2.Opacity = args.NewValue;
  17.     }
  18. }

同时,设置不透明度值,以便当两个标签在屏幕上移动时,一个Label似乎淡入另一个Label:
2018_09_07_100033
阅读(1115) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~