diff options
author | Rui Marinho <me@ruimarinho.net> | 2016-08-03 10:07:50 +0100 |
---|---|---|
committer | Jason Smith <jason.smith@xamarin.com> | 2016-08-03 02:07:50 -0700 |
commit | 671d9466400acc7bd9bc7db45f550b2a4c6cb596 (patch) | |
tree | 7a815b402961e62304832400ec430dc7c69f6022 | |
parent | 23614ca8c6cc78cb2b1df91977fd539a9fa159df (diff) | |
download | xamarin-forms-671d9466400acc7bd9bc7db45f550b2a4c6cb596.tar.gz xamarin-forms-671d9466400acc7bd9bc7db45f550b2a4c6cb596.tar.bz2 xamarin-forms-671d9466400acc7bd9bc7db45f550b2a4c6cb596.zip |
Fix bugzilla41209 (#216)
* [Android] Add custom FormsSeekbar to handle invalid pressed states send by other views
* [Controls] Fix sample , error only occurs with transparent background
5 files changed, 85 insertions, 1 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla41029.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla41029.cs new file mode 100644 index 00000000..bd3e3ad6 --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla41029.cs @@ -0,0 +1,30 @@ +using System; + +using Xamarin.Forms.CustomAttributes; +using Xamarin.Forms.Internals; + + +namespace Xamarin.Forms.Controls +{ + [Preserve(AllMembers = true)] + [Issue(IssueTracker.Bugzilla, 41029, "Slider default hitbox is larger than the control")] + public class Bugzilla41029 : TestContentPage // or TestMasterDetailPage, etc ... + { + protected override void Init() + { + var layout = new StackLayout { VerticalOptions = LayoutOptions.Center }; + var lbl = new Label(); + var slider = new Slider(); + slider.HeightRequest = 50; + slider.ValueChanged += (object sender, ValueChangedEventArgs e) => + { + + lbl.Text = e.NewValue.ToString(); + }; + layout.Children.Add(lbl); + layout.Children.Add(slider); + + Content = layout; + } + } +} diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems index f9aeff69..4fdb18fd 100644 --- a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems @@ -425,6 +425,7 @@ <Compile Include="$(MSBuildThisFileDirectory)Bugzilla38284.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla39486.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Issue55555.cs" /> + <Compile Include="$(MSBuildThisFileDirectory)Bugzilla41029.cs" /> </ItemGroup> <ItemGroup> <EmbeddedResource Include="$(MSBuildThisFileDirectory)Bugzilla22229.xaml"> diff --git a/Xamarin.Forms.Platform.Android/Renderers/FormsSeekBar.cs b/Xamarin.Forms.Platform.Android/Renderers/FormsSeekBar.cs new file mode 100644 index 00000000..cb58fbd7 --- /dev/null +++ b/Xamarin.Forms.Platform.Android/Renderers/FormsSeekBar.cs @@ -0,0 +1,52 @@ +using System; +using Android.Widget; +using Android.Content; +using Android.Views; + + +namespace Xamarin.Forms.Platform.Android +{ + internal class FormsSeekBar : SeekBar + { + public FormsSeekBar(Context context) : base(context) + { + //this should work, but it doesn't. + DuplicateParentStateEnabled = false; + } + + public override bool OnTouchEvent(MotionEvent e) + { + switch (e.Action) + { + case MotionEventActions.Down: + isTouching = true; + break; + case MotionEventActions.Up: + Pressed = false; + break; + } + + return base.OnTouchEvent(e); + } + + public override bool Pressed + { + get + { + return base.Pressed; + } + set + { + if (isTouching) + { + base.Pressed = value; + isTouching = value; + } + + } + } + + bool isTouching = false; + } +} + diff --git a/Xamarin.Forms.Platform.Android/Renderers/SliderRenderer.cs b/Xamarin.Forms.Platform.Android/Renderers/SliderRenderer.cs index 694052ef..dbe1887f 100644 --- a/Xamarin.Forms.Platform.Android/Renderers/SliderRenderer.cs +++ b/Xamarin.Forms.Platform.Android/Renderers/SliderRenderer.cs @@ -40,7 +40,7 @@ namespace Xamarin.Forms.Platform.Android if (e.OldElement == null) { - var seekBar = new SeekBar(Context); + var seekBar = new FormsSeekBar(Context); SetNativeControl(seekBar); seekBar.Max = 1000; diff --git a/Xamarin.Forms.Platform.Android/Xamarin.Forms.Platform.Android.csproj b/Xamarin.Forms.Platform.Android/Xamarin.Forms.Platform.Android.csproj index 0af74ad8..35367397 100644 --- a/Xamarin.Forms.Platform.Android/Xamarin.Forms.Platform.Android.csproj +++ b/Xamarin.Forms.Platform.Android/Xamarin.Forms.Platform.Android.csproj @@ -239,6 +239,7 @@ <Compile Include="AppCompat\CarouselPageRenderer.cs" /> <Compile Include="AppCompat\FormsFragmentPagerAdapter.cs" /> <Compile Include="AndroidAppIndexProvider.cs" /> + <Compile Include="Renderers\FormsSeekBar.cs" /> </ItemGroup> <Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" /> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. |