summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRui Marinho <me@ruimarinho.net>2016-08-03 10:07:50 +0100
committerJason Smith <jason.smith@xamarin.com>2016-08-03 02:07:50 -0700
commit671d9466400acc7bd9bc7db45f550b2a4c6cb596 (patch)
tree7a815b402961e62304832400ec430dc7c69f6022
parent23614ca8c6cc78cb2b1df91977fd539a9fa159df (diff)
downloadxamarin-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
-rw-r--r--Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla41029.cs30
-rw-r--r--Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems1
-rw-r--r--Xamarin.Forms.Platform.Android/Renderers/FormsSeekBar.cs52
-rw-r--r--Xamarin.Forms.Platform.Android/Renderers/SliderRenderer.cs2
-rw-r--r--Xamarin.Forms.Platform.Android/Xamarin.Forms.Platform.Android.csproj1
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.