GithubHelp home page GithubHelp logo

xameffects's Introduction

XamEffects - UI effects for Xamarin.Forms

NuGet

Setup

Install-Package XamEffects
  • You have to install this nuget package to Xamarin.Forms project and each platform project.
  • Call after Forms.Init(...):
    • XamEffects.iOS.Effects.Init(); for iOS AppDelegate in FinishedLaunching
    • XamEffects.Droid.Effects.Init(); for Android MainActivity in OnCreate
Platform Minimum version
iOS 8
Android 4.1 (API 16)
Xamarin.Forms 2.5.0
.NETStandard 1.0

Features

TouchEffect

Add touch effect to views.

For Android API >=21 using Ripple effect, for Android API <21 and iOS using animated highlighted view.

iOS Android API >=21 Android API <21
Property Type Value type Default Description
Color bindable attached Color Color.Default Front/Ripple color when touched. For deactivate effect set Color.Default value. If color will have alpha channel is 255 effect will change it to ±80.

Example

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:XamEffects.Sample"
             xmlns:xe="clr-namespace:XamEffects;assembly=XamEffects"
             x:Class="XamEffects.Sample.MainPage">
    <Grid HorizontalOptions="Center"
          VerticalOptions="Center"
          HeightRequest="100"
          WidthRequest="200"
          BackgroundColor="LightGray" 
          xe:TouchEffect.Color="Red">
        <Label Text="Test touch effect"
               HorizontalOptions="Center"
               VerticalOptions="Center"/>
    </Grid>
</ContentPage>
TouchEffect.SetColor(view, Color.Red);

Important & known issues

  • Effect may not work in views with enabled Fast Renderers.
  • Effect may not work in views with another gestures and effects like Button, Slider, Picker, Entry, Editor etc.
  • Effect may not work correctly with standard gestures in Xamarin.Forms. If you need some gestures with touch effect, use not GestureRecognizer, but Commands.

If effect doesn't work, try wrap view with ContentView and add effect to wrapper.

Commands

Add command to views.

Property Type Value type Default Description
Tap bindable attached ICommand null Tap command
TapParameter bindable attached object null Tap command parameter
LongTap bindable attached ICommand null Long tap command
LongTapParameter bindable attached object null Long tap command parameter

Example

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:XamEffects.Sample"
             xmlns:xe="clr-namespace:XamEffects;assembly=XamEffects"
             x:Class="XamEffects.Sample.MainPage">
    <Grid HorizontalOptions="Center"
          VerticalOptions="Center"
          HeightRequest="100"
          WidthRequest="200"
          BackgroundColor="LightGray" 
          xe:Commands.Tap="{Binding TapCommand}"
          xe:Commands.LongTap="{Binding LongTapCommand}">
        <Label Text="Test commands"
               HorizontalOptions="Center"
               VerticalOptions="Center"/>
    </Grid>
</ContentPage>
Commands.SetTap(view, new Command(() => {
  //do something
}));
Commands.SetTapParameter(view, someObject);

BorderView

View with borders, corner radius and clipping to bounds. View based on ContentView, you can specify child through Content property.

Property Type Value type Default Description
CornerRadius bindable attached double 0 Corner radius
BorderWidth bindable attached double 0 Border width
BorderColor bindable attached Color Color.Default Border color

Example

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:XamEffects.Sample"
             xmlns:xe="clr-namespace:XamEffects;assembly=XamEffects"
             x:Class="XamEffects.Sample.MainPage">
    <xe:BorderView 
          HeightRequest="100"
          WidthRequest="200"
          HorizontalOptions="Center"
          VerticalOptions="Center"
          BackgroundColor="LightGray"
          CornerRadius="15"
          BorderColor="Green"
          BorderWidth="2">
        <Label HorizontalOptions="Center"
               VerticalOptions="Center"
               Text="Some content"/>
    </xe:BorderView>
</ContentPage>

Why view, not effect like other features? Firstly I planned to do this. For iOS there are no problems, but for Android for clipping to rounded corners need override DispatchDraw from native view, that isn't possible from effect.

Important & known issues

  • Padding work incorrectly in Android. Use margin in child view.

EffectsConfig

Configs and helpers for effects.

Property Type Value type Default Description
AutoChildrenInputTransparent usual static bool True Set ChildrenInputTransparent automatically for views with TouchEffect or Command. If value is True you DON'T need manually configure ChildrenInputTransparent.
ChildrenInputTransparent bindable attached bool False If you use TouchEffect or Commands for Layout (Grid, StackLayout, etc.) and EffectsConfig.AutoChildrenInputTransparent is False you have to set this parameter to True otherwise in Android layout's children will overlaps these effects. Also you can set InputTransparent = True for each children (EXCEPT views using any effect) manually.

License

MIT Licensed.

To do

Support UWP

Release notes

Moved to Release notes

xameffects's People

Contributors

chaparo avatar mrxten avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

xameffects's Issues

Xamarin 4.3 bug crash

image
image

Stack trace
at XamEffects.Droid.TouchEffectPlatform.OnAttached () [0x00033] in /Users/vzhukov/Projects/XamEffects/src/XamEffects.Droid/TouchEffectPlatform.cs:45
at Xamarin.Forms.Effect.SendAttached () [0x00009] in D:\a\1\s\Xamarin.Forms.Core\Effect.cs:54
at Xamarin.Forms.RoutingEffect.SendAttached () [0x00000] in D:\a\1\s\Xamarin.Forms.Core\RoutingEffect.cs:29
at Xamarin.Forms.Element.AttachEffect (Xamarin.Forms.Effect effect) [0x00045] in D:\a\1\s\Xamarin.Forms.Core\Element.cs:536
at Xamarin.Forms.Element.set_EffectControlProvider (Xamarin.Forms.IEffectControlProvider value) [0x0007c] in D:\a\1\s\Xamarin.Forms.Core\Element.cs:237
at Xamarin.Forms.Internals.EffectUtilities.RegisterEffectControlProvider (Xamarin.Forms.IEffectControlProvider self, Xamarin.Forms.IElementController oldElement, Xamarin.Forms.IElementController newElement) [0x0001a] in D:\a\1\s\Xamarin.Forms.Core\Internals\EffectUtilities.cs:16
at Xamarin.Forms.Platform.Android.FastRenderers.VisualElementRenderer.OnElementChanged (System.Object sender, Xamarin.Forms.Platform.Android.VisualElementChangedEventArgs e) [0x0005c] in D:\a\1\s\Xamarin.Forms.Platform.Android\FastRenderers\VisualElementRenderer.cs:100
at (wrapper delegate-invoke) System.EventHandler1[Xamarin.Forms.Platform.Android.VisualElementChangedEventArgs].invoke_void_object_TEventArgs(object,Xamarin.Forms.Platform.Android.VisualElementChangedEventArgs) at Xamarin.Forms.Platform.Android.FastRenderers.LabelRenderer.OnElementChanged (Xamarin.Forms.Platform.Android.ElementChangedEventArgs1[TElement] e) [0x00000] in D:\a\1\s\Xamarin.Forms.Platform.Android\FastRenderers\LabelRenderer.cs:224
at Xamarin.Forms.Platform.Android.FastRenderers.LabelRenderer.set_Element (Xamarin.Forms.Label value) [0x00018] in D:\a\1\s\Xamarin.Forms.Platform.Android\FastRenderers\LabelRenderer.cs:77
at Xamarin.Forms.Platform.Android.FastRenderers.LabelRenderer.Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00015] in D:\a\1\s\Xamarin.Forms.Platform.Android\FastRenderers\LabelRenderer.cs:150
at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element, Android.Content.Context context) [0x0001f] in D:\a\1\s\Xamarin.Forms.Platform.Android\Platform.cs:344
at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement view, Xamarin.Forms.Platform.Android.IVisualElementRenderer oldRenderer, Xamarin.Forms.Platform.Android.RendererPool pool, System.Boolean sameChildren) [0x000af] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:138
at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement, Xamarin.Forms.VisualElement newElement) [0x00139] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:334
at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x00000] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:110
at Xamarin.Forms.Platform.Android.VisualElementRenderer1[TElement].SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager packager) [0x00007] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:439 at Xamarin.Forms.Platform.Android.VisualElementRenderer1[TElement].SetElement (TElement element) [0x000d5] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:233
at Xamarin.Forms.Platform.Android.VisualElementRenderer1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00027] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:127 at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element, Android.Content.Context context) [0x0001f] in D:\a\1\s\Xamarin.Forms.Platform.Android\Platform.cs:344 at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement view, Xamarin.Forms.Platform.Android.IVisualElementRenderer oldRenderer, Xamarin.Forms.Platform.Android.RendererPool pool, System.Boolean sameChildren) [0x000af] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:138 at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement, Xamarin.Forms.VisualElement newElement) [0x00139] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:334 at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x00000] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:110 at Xamarin.Forms.Platform.Android.VisualElementRenderer1[TElement].SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager packager) [0x00007] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:439
at Xamarin.Forms.Platform.Android.VisualElementRenderer1[TElement].SetElement (TElement element) [0x000d5] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:233 at Xamarin.Forms.Platform.Android.VisualElementRenderer1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00027] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:127
at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element, Android.Content.Context context) [0x0001f] in D:\a\1\s\Xamarin.Forms.Platform.Android\Platform.cs:344
at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement view, Xamarin.Forms.Platform.Android.IVisualElementRenderer oldRenderer, Xamarin.Forms.Platform.Android.RendererPool pool, System.Boolean sameChildren) [0x000af] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:138
at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement, Xamarin.Forms.VisualElement newElement) [0x00139] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:334
at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x00000] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:110
at Xamarin.Forms.Platform.Android.VisualElementRenderer1[TElement].SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager packager) [0x00007] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:439 at Xamarin.Forms.Platform.Android.VisualElementRenderer1[TElement].SetElement (TElement element) [0x000d5] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:233
at Xamarin.Forms.Platform.Android.VisualElementRenderer1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00027] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:127 at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element, Android.Content.Context context) [0x0001f] in D:\a\1\s\Xamarin.Forms.Platform.Android\Platform.cs:344 at Xamarin.Forms.Platform.Android.ScrollViewContainer.set_ChildView (Xamarin.Forms.View value) [0x0002f] in D:\a\1\s\Xamarin.Forms.Platform.Android\Renderers\ScrollViewContainer.cs:37 at Xamarin.Forms.Platform.Android.ScrollViewRenderer.LoadContent () [0x00000] in D:\a\1\s\Xamarin.Forms.Platform.Android\Renderers\ScrollViewRenderer.cs:364 at Xamarin.Forms.Platform.Android.ScrollViewRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x000cf] in D:\a\1\s\Xamarin.Forms.Platform.Android\Renderers\ScrollViewRenderer.cs:97 at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element, Android.Content.Context context) [0x0001f] in D:\a\1\s\Xamarin.Forms.Platform.Android\Platform.cs:344 at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement view, Xamarin.Forms.Platform.Android.IVisualElementRenderer oldRenderer, Xamarin.Forms.Platform.Android.RendererPool pool, System.Boolean sameChildren) [0x000af] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:138 at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement, Xamarin.Forms.VisualElement newElement) [0x00139] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:334 at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x00000] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:110 at Xamarin.Forms.Platform.Android.VisualElementRenderer1[TElement].SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager packager) [0x00007] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:439
at Xamarin.Forms.Platform.Android.VisualElementRenderer1[TElement].SetElement (TElement element) [0x000d5] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:233 at Xamarin.Forms.Platform.Android.VisualElementRenderer1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00027] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:127
at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element, Android.Content.Context context) [0x0001f] in D:\a\1\s\Xamarin.Forms.Platform.Android\Platform.cs:344
at Xamarin.Forms.Platform.Android.MasterDetailContainer.AddChildView (Xamarin.Forms.VisualElement childView) [0x0000a] in D:\a\1\s\Xamarin.Forms.Platform.Android\Renderers\MasterDetailContainer.cs:55
at Xamarin.Forms.Platform.Android.AppCompat.MasterDetailContainer.AddChildView (Xamarin.Forms.VisualElement childView) [0x00071] in D:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\MasterDetailContainer.cs:89
at Xamarin.Forms.Platform.Android.MasterDetailContainer.set_ChildView (Xamarin.Forms.VisualElement value) [0x0002e] in D:\a\1\s\Xamarin.Forms.Platform.Android\Renderers\MasterDetailContainer.cs:47
at Xamarin.Forms.Platform.Android.AppCompat.MasterDetailPageRenderer.g__Update|82_0 () [0x0003f] in D:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\MasterDetailPageRenderer.cs:444
at Xamarin.Forms.Platform.Android.AppCompat.MasterDetailPageRenderer.UpdateMaster () [0x0000d] in D:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\MasterDetailPageRenderer.cs:431
at Xamarin.Forms.Platform.Android.AppCompat.MasterDetailPageRenderer.Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x0012f] in D:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\MasterDetailPageRenderer.cs:157
at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element, Android.Content.Context context) [0x0001f] in D:\a\1\s\Xamarin.Forms.Platform.Android\Platform.cs:344
at Xamarin.Forms.Platform.Android.AppCompat.Platform.AddChild (Xamarin.Forms.Page page, System.Boolean layout) [0x0000d] in D:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\Platform.cs:362
at Xamarin.Forms.Platform.Android.AppCompat.Platform.SetPageInternal (Xamarin.Forms.Page newRoot) [0x00036] in D:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\Platform.cs:320
at Xamarin.Forms.Platform.Android.AppCompat.Platform.SetPage (Xamarin.Forms.Page newRoot) [0x000dc] in D:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\Platform.cs:282
at Xamarin.Forms.Platform.Android.FormsAppCompatActivity.InternalSetPage (Xamarin.Forms.Page page) [0x00039] in D:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\FormsAppCompatActivity.cs:435
at Xamarin.Forms.Platform.Android.FormsAppCompatActivity.SetMainPage () [0x00000] in D:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\FormsAppCompatActivity.cs:461
at Xamarin.Forms.Platform.Android.FormsAppCompatActivity.LoadApplication (Xamarin.Forms.Application application) [0x00118] in D:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\FormsAppCompatActivity.cs:184
at SpecEquip.Droid.MainActivity.OnCreate (Android.OS.Bundle savedInstanceState) [0x0003b] in C:\Users\nimaev\source\repos\SpecialEquipmentMobile\SpecEquip\SpecEquip.Android\MainActivity.cs:28
at Android.App.Activity.n_OnCreate_Landroid_os_Bundle_ (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_savedInstanceState) [0x00011] in <8c07a09624c14764b43f6b946a5a1f23>:0
at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.11(intptr,intptr,intptr)

Seems it doesn't work with Xamarin 4.0 (currently in Beta)

Hi, I was not able to make it run on Xamarin 4 (4.0.0.250467-pre7) on Samsung Tab 2 Active (Android 8.1)

XamEffects 1.5.6 referenced using Nuget Package on main project and all platform projects

MainActivity.cs

        protected override void OnCreate(Bundle savedInstanceState)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(savedInstanceState);

            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);

            LoadApplication(new App());
        }

MainPage.xaml

XE declaration added
xmlns:xe="clr-namespace:XamEffects;assembly=XamEffects"

Then used like this

		<StackLayout
			Grid.Column="0"
			Margin="0,4,0,4"
			Orientation="Vertical"
			>

			<Grid
				x:Name="GridEl"
				WidthRequest="48"
				HeightRequest="48"
				xe:TouchEffect.Color="Red"
				BackgroundColor="DarkGray"
				>

				<Label Text="TEST LABEL" />

			</Grid>
		</StackLayout>

Project builds and run, but no ripple effect on Android.

I've also tried to define this using C# code, including .SetTap - but still no luck.

Just to be sure, I've additionally tested it on an emulator - same results.

Have a good day.

Check if container is null in IsDisposed

Hi, if the container is gone before the animation ended, the app can crash.

I suggest this fix in TouchEffectPlatform.cs (both plattform projects):
public bool IsDisposed => (Container as IVisualElementRenderer)?.Element == null;
instead of
public bool IsDisposed => ((IVisualElementRenderer)Container).Element == null;

First Touch doesn't work

When I tap the grid for the first time, there is no touch effect. And after the second and subsequent touches everything works perfect. If it real to fix this bug?

WPF Support

Is that work in WPF?

I have created a project in xamarin form for wpf, android and ios. I need this feature in android. but it's ok, if that will not work in WPF with out any library missing error. Will that work ?

[Feature] UWP simple support

hey man !

Fan of your work :)
Would be nice to have a minimal support for UWP.
I rely on your effects for my lib and because of that some plain XF components aren't working on UWP...
Would be super great to have a simple UWP impl for TapCommand and TapFeedback (even if it deliver the same level of feature as the TapGestureRecognizer).

XamEffects does not work with Android with Xamarin Forms v4

I have updated my solution to Xamarin Forms v4.0.0.497661
My android test version is Android 6.0 - Api 23

The error is quite basic :

Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object.

Is there any chance that you'd support Fast Renderers in the near future or should I wrap all my xameffects controls in a contentview?

ListView Item

Hi Buddy,
Nice work, pretty awesome plugin.

I Implemented it in a ListView and it worked just fine until I scroll a couple of pages down, so when I click an Item, it shows the effect in other items. I uploaded a simple code with the problem if you could take a look. Thanks.
https://github.com/brunohenriquy/ListViewXamEffects

[Enhancement] Automatic execution of LongTapCommand

Hello,

If I use the LongTap command, it will only be executed if it is held down for some time and then released.

As a user, I would find it better if I only have to hold down for a while and then the command is executed automatically.

What do you mean?

LongTap command not wokring on Grid

Hello it seems that long tap command is not fired when using it on Grid element.
I am testing on android API 24.

<Grid xe:Commands.LongTap="{Binding DownLongCommand}" xe:TouchEffect.Color="Red">
     <Label Text="TEST" />
</Grid>

The command is binded to property and the color effect is there, but the actual command from view model is never actually executed.

Please upgrade the Android Support Libraries used

There are many XA0106 warnings on Android appearing after referencing the 1.6.3 NuGet. These warnings can be disabled as described here but it would be better to have matching Android Support Library versions right? We are on 28.0.x

1.3.3 init?

Having troubles with version 1.3.3, the ui doesnt react.

XamEffects.Droid.Effects.Init(); doesnt exist in this version so im going with XamEffects.Effects.Init();
is there anything else i have to do?

Im using 1.4 in a different project and it works like a charm

Thanks!

Application crashes on Startup. Only clue is XamEffects using ProgressBar

There is an issue crashing android applications.
There are no repro steps and it's not happening every time. We have only 0.5% of users experiencing this crash.

android.widget.ProgressBar.onRestoreInstanceState
ProgressBar.java, line 2538
java.lang.ClassCastException: android.view.AbsSavedState$1 cannot be cast to android.widget.ProgressBar$SavedState

Full stacktrace:

android.widget.ProgressBar.onRestoreInstanceState ProgressBar.java:2538
android.view.View.dispatchRestoreInstanceState View.java:22256
android.view.ViewGroup.dispatchRestoreInstanceState ViewGroup.java:4826
android.view.ViewGroup.dispatchRestoreInstanceState ViewGroup.java:4826
android.view.ViewGroup.dispatchRestoreInstanceState ViewGroup.java:4826
android.view.ViewGroup.dispatchRestoreInstanceState ViewGroup.java:4826
android.view.ViewGroup.dispatchRestoreInstanceState ViewGroup.java:4826
android.view.ViewGroup.dispatchRestoreInstanceState ViewGroup.java:4826
android.view.ViewGroup.dispatchRestoreInstanceState ViewGroup.java:4826
android.view.ViewGroup.dispatchRestoreInstanceState ViewGroup.java:4826
android.view.ViewGroup.dispatchRestoreInstanceState ViewGroup.java:4826
android.view.ViewGroup.dispatchRestoreInstanceState ViewGroup.java:4826
android.view.ViewGroup.dispatchRestoreInstanceState ViewGroup.java:4826
android.view.ViewGroup.dispatchRestoreInstanceState ViewGroup.java:4826
android.view.View.restoreHierarchyState View.java:22234
com.android.internal.policy.PhoneWindow.restoreHierarchyState PhoneWindow.java:2272
android.app.Activity.onRestoreInstanceState Activity.java:1768
android.app.Activity.performRestoreInstanceState Activity.java:1721
android.app.Instrumentation.callActivityOnRestoreInstanceState Instrumentation.java:1376
android.app.ActivityThread.handleStartActivity ActivityThread.java:4152
android.app.servertransaction.TransactionExecutor.performLifecycleSequence TransactionExecutor.java:221
android.app.servertransaction.TransactionExecutor.cycleToPath TransactionExecutor.java:201
android.app.servertransaction.TransactionExecutor.executeLifecycleState TransactionExecutor.java:173
android.app.servertransaction.TransactionExecutor.execute TransactionExecutor.java:97
android.app.ActivityThread$H.handleMessage ActivityThread.java:2443
android.os.Handler.dispatchMessage Handler.java:106
android.os.Looper.loopOnce Looper.java:226
android.os.Looper.loop Looper.java:313
android.app.ActivityThread.main ActivityThread.java:8751
java.lang.reflect.Method.invoke Method.java
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run RuntimeInit.java:571
com.android.internal.os.ZygoteInit.main ZygoteInit.java:1135

We don't use any ProgressBars and the only nuget that uses them is XamEffects so I am directing this issue here.

Android init

Hi, great plugin. In my ios project work fine but in android no work. Wich is the initialize command for android?

Thanks

Don't work on ContentView, Grid, StackLayout in C#

Don't work on this(ContentView), layout(Grid or StackLayout). Work only on text (Label)

My code:
public class TabbarButton : ContentView
{
public TabbarButton()
{
BackgroundColor = Color.LightGray;

        var text = new Label { VerticalOptions = LayoutOptions.Fill, HorizontalOptions = LayoutOptions.FillAndExpand };

        var layout = new Grid
        {
            HorizontalOptions =LayoutOptions.FillAndExpand,
            Children =
            {
                text
            }

        };
        HorizontalOptions = LayoutOptions.FillAndExpand;
        Content = layout;

        TouchEffect.Init();
        TouchEffect.SetColor(text, Color.Red);

        Commands.SetTap(text, new Command(() => Debug.WriteLine("ELO")));

    }
}

Add check for null for Container is iOS/TouchEffectPlatform.cs

Hi, recently had an issue on iOS, I got a null reference for (IVisualElementRenderer)Container when navigating through different pages in an Forms app on iOS, and I fixed it by adding the null conditioning operator. Would be helpful if you could add it in the code so I can use the nuget package.

Thank you

image

TouchEffect triggers during scroll gesture

Putting the toucheffect into an item within a scrollview/listview it will trigger the effect on touch-down, including during a scroll, rather than only when there is a touch-up in the same location (i.e. when the tapcommand executes)

I would expect it to ignore the tap in this scenario - it is quite confusing to an end user in any scrollable layout.

Bind Commands.Tap from inside bound list in xaml

Any idea why this isn't working? I'm trying to setup binding from xaml like this:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Name="Detail"

    <!-- irrelevant code snipped -->
    <local:BindableStackLayout

    <!-- irrelevant code snipped -->
    <StackLayout 
        xe:TouchEffect.Color="{StaticResource NavigationPrimary}" 
        xe:Commands.Tap="{Binding PromotionTapCommand, Source={x:Reference Detail}}" 
        xe:Commands.TapParameter="{Binding Id}">

In code behind:

    public ICommand PromotionTapCommand  { get; set; } = new Command<string>(PromotionTapped);

    private static void PromotionTapped(string value)
    {
        throw new NotImplementedException();
    }

But the event is not fired. If I use this principle it works:

Commands.SetTap(itemTemplate, new Command(() => 
{
        throw new NotImplementedException();
}));

But this involves a lot of event forwarding. I prefer if I could specify the commands in xaml.

Also when I put the binding on a view directly in the page it works. So there must be something with bounded lists and your component thats not playing well together.

Thanks!

Null reference

void BringLayer() {
_layer.Layer.RemoveAllAnimations();
_layer.Alpha = _alpha;
View.BringSubviewToFront(_layer);
}

How to add TouchEffects in C#

Hello, I'm new to Xamarin.forms. I like so much your plugin it works perfectly with XAML. I'm trying to generate some customcontrols inside another customcontrol with C# code directly, but I don't know in this case how can I use XamEffect, can you give me a little help?

PressedCommand doesn´t work

Pressed command doesn´t trigger for any view, i´ve tried everything, but no sucess.

also, is there a way to "untrack" o "stop detecting" tap? or a way to stop the process that run on other thread that checks for taps of all "setted or affected" objects?

Im chaging objects dinamically and my app stops (crash) if i change an already "thouchAffected" (already configured the binding) object. I think that this is happeing because off the app is looking for "the previous version" of the object (before changing it).

screenshot 1
screenshot 2

Binding Color not working

Hi. Tried this:
xe:TouchEffect.Color="{Binding StudentTapColor}"
But the color doesn't seem to be set. Is binding supported?

TouchEffect and scrolling (Android)

Hi,
i have the same problem as described in this post: #41
and i played a litte bit with your code. If i comment out the TouchCollector.Add and TouchCollector.Delete calls the ripple effect is not called while scrolling, like items in a ListView.
But my problem is now, that the Command is not executed. Do you still support your library and could you fix it?

LongPress Timer

Any way the LongTap command can be fired after a timer, and not just when the user removes the finger ? that would make this Effect even better.

by the way, great work!

Bind Commands.Tap inside ListView in RefreshView

Hi,

The Binding inside cell template of ListView working nice, but when I added the grouping the binding stop working :(

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:xe="clr-namespace:XamEffects;assembly=XamEffects"
             mc:Ignorable="d"
             x:Name="page"
              ....
<ListView x:Name="CashList"
                          IsGroupingEnabled="True" 
                          ItemSelected="CashList_ItemSelected"
                          GroupDisplayBinding="{Binding GroupKey}">
<ListView.ItemTemplate>
                            <DataTemplate>
                                <ViewCell>
                                    <Frame Padding="0" Margin="16,4" VerticalOptions="Center">
                                        <StackLayout 
                                            xe:TouchEffect.Color="#CCC"
                                            xe:Commands.Tap="{Binding Source={x:Reference page}, Path=TapCommand}"
                                            xe:Commands.TapParameter="{Binding name}">
                                            <StackLayout Orientation="Horizontal" Margin="10">
                                                <Label Text="{Binding name}" HorizontalOptions="Start" TextColor="Black"/>
                                                <Label Text="{Binding valuta}" HorizontalOptions="Start" TextColor="Black"/>
                                            </StackLayout>
                                        </StackLayout>
                                    </Frame>
                                </ViewCell>
                            </DataTemplate>
                    </ListView.ItemTemplate>
 public partial class MoneyPage : ContentPage
    {
        public ICommand TapCommand { get { return new Command<string>((x) => Go_Tapped(x)); } }
private async void Go_Tapped(string data)
        {
            MasterDetailPage masterDetail = (MasterDetailPage)Application.Current.MainPage;
        }

Touch effect does not show

HI, I'm trying to implement a Fab which has touch effects, but the effects do not show up. unless I reload the control using hotreload. I applied it to a contentView as mentioned in your readme hopping that this will make it appear, but nothing,
The command works very well but not the effect

<xamEffects:BorderView HeightRequest="{Binding Size, Source={x:Reference fab}}"
                               WidthRequest="{Binding Size, Source={x:Reference fab}}"
                               CornerRadius="360"
                               BackgroundColor="Transparent">
                <ContentView xamEffects:TouchEffect.Color="{Binding Source={x:Reference fab}, Path=EffectColor}"
                             xamEffects:Commands.Tap="{Binding ClickedCommand, Source={x:Reference fab}}"
                             BackgroundColor="{Binding FabBackground, Source={x:Reference fab}}">
                    <Label Style="{StaticResource FontAwesomeSolidLabel}"
                           Text="{Binding Source={x:Reference fab}, Path=FontIcon}"
                           FontSize="Large" HorizontalOptions="Center"
                           VerticalOptions="Center"
                           TextColor="{Binding Source={x:Reference fab}, Path=IconColor}"/>
                </ContentView>
            </xamEffects:BorderView>

Package issue

Package gets uninstalled after each build.
I got an error like this "Failed to resolve assembly: 'XamEffects, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'"

Xamarin Forms 4.2

I updated my project to Xamarin Forms 4.2 and Android 9.0 (Pie), but XamEffects doesn't seem to work in that scenario. I get a NullReferenceException on this code in TouchEffectPlatform:

_viewOverlay = new FrameLayout(Container.Context) {
    LayoutParameters = new ViewGroup.LayoutParams(-1, -1),
    Clickable = false,
    Focusable = false,
};

Container here is null.

Stack trace:

System.NullReferenceException: Object reference not set to an instance of an object.
  at XamEffects.Droid.TouchEffectPlatform.OnAttached () [0x00043] in D:\Projects\Dnote\MyMapBox\External Libs\XamEffects.Droid\TouchEffectPlatform.cs:45 
  at Xamarin.Forms.Effect.SendAttached () [0x00009] in d:\a\1\s\Xamarin.Forms.Core\Effect.cs:54 
  at Xamarin.Forms.RoutingEffect.SendAttached () [0x00000] in d:\a\1\s\Xamarin.Forms.Core\RoutingEffect.cs:29 
  at Xamarin.Forms.Element.AttachEffect (Xamarin.Forms.Effect effect) [0x00045] in d:\a\1\s\Xamarin.Forms.Core\Element.cs:545 
  at Xamarin.Forms.Element.set_EffectControlProvider (Xamarin.Forms.IEffectControlProvider value) 

Worked in Xamarin Forms 3 / Android 8.1

Null Reference Exception when enabling Fast Renderers

Is soon as I enable Fast Renderers in XF, I get a Null Reference Exception.

If I remove the XamEffects attributes of this image element, my application continues just fine:

<Image Source="add_btn"
    HorizontalOptions="End"
    xe:TouchEffect.Color="{StaticResource PrimaryBrandColor}"
    xe:Commands.Tap="{Binding AddNoteCommand}" />

Label is overlaid by ripple when inside a Grid/StackLayout

When putting a Label inside of a Grid or a StackLayout, the Label is overlaid by ripple effect.
If a Button is put inside the same Grid/StackLayout, then the Label is not overlaid anymore, and the ripple effect occurs correctly, only in the background.

The issue is easily simulated by putting a Label and a Button inside a Grid or a StackLayout.

Other controls like Boxview is overlaid the same way the Label is.

This situation was tested on Android.

Command and CanExecute not working on Label

I have tried many things but it seems to be a bug that I cannot solve alone. Everything works fine with my implementation except when I try to prevent the execution with a property set to false. The Observation is never taken into consideration and execute the command method immediately. Hereby is the code :

<Label  Text="Test XamEffects"  
xamEffects:TouchEffect.Color="{StaticResource XamEffectsColor}" 
xamEffects:Commands.Tap="{Binding ShowDetails}"/>

ViewModel:
ShowDetails= new DelegateCommand<object>(ExecuteShowCertificateDetails).ObservesCanExecute(() => CanNavigate);

Here I am using Prism but I have the same result if I switch to Xamarin default Command and canExecute method. Note that it is working as expect if I use Tapgesturerecognizer.

[Bug] TapCommand is different in Xamarin.Android than in Xamarin.iOS

Hi there,

I have the following scenario: (Simplified for demonstration)

<ListView ItemsSource="{Binding Users, Mode=OneWay}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <Grid Padding="12"
                      ColumnSpacing="16">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"></ColumnDefinition>
                        <ColumnDefinition Width="Auto"></ColumnDefinition>
                    </Grid.ColumnDefinitions>

                    <Label Grid.Column="0"
                           Text="Click me!"
                           FontSize="16"
                           FontAttributes="Bold"
                           TextColor="Black"
                           VerticalOptions="Center"></Label>

                    <Grid Grid.Column="1"
                          xe:TouchEffect.Color="{StaticResource TouchEffectColor}"
                          xe:Commands.Tap="{Binding BindingContext.OpenUserOptionsCommand, Source={x:Reference thisMemberCollectionPage}, Mode=OneWay}"
                          xe:Commands.TapParameter="{Binding ., Mode=OneWay}"></Grid>
                </Grid>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>

    <ListView.Behaviors>
        <behaviors:EventToCommandBehavior EventName="ItemTapped"
                                          Command="{Binding UserTappedCommand}"
                                          EventArgsPropertyPath="Item"></behaviors:EventToCommandBehavior>
    </ListView.Behaviors>
</ListView>

When clicking on the inner grid in the ViewCell, Xamarin.Android only triggers the TapCommand of the grid by XamEffects.

In Xamarin.iOS, however, the TapCommand and the ItemTapped event of the ListView are triggered.
This is stupid because I use both events and then both are triggered at the same time.
It is also not that great that something different happens on both platforms.

Can you prevent ItemTapped from firing in iOS?

iOS xe:Commands.Tap gesture doesnt work on iOS, works fine android

Hi there,

I am having an issue raising the gesture command for iOS, on android it works fine.

I have a setup with a CollectionView and each item has a PancakeView wrapping an item (see below), is there any reason why this wouldnt be working on iOS if it works fine on android?

Im calling

Effects.Init(); 

after

Xamarin.Forms.Forms.Init();
<CollectionView
            Margin="10,0"
            ItemsSource="{Binding Incidents}">
            <CollectionView.ItemsLayout>
                <GridItemsLayout
                    HorizontalItemSpacing="10"
                    Orientation="Vertical"
                    Span="2"
                    VerticalItemSpacing="10" />
            </CollectionView.ItemsLayout>
            <CollectionView.ItemTemplate>
                <DataTemplate>
                    <pancakeview:PancakeView
                        Padding="20"
                        xe:Commands.Tap="{Binding ItemTappedCommand}" // ItemTapped
                        xe:Commands.TapParameter="{Binding .}" // Passes the ViewModel
                        xe:TouchEffect.Color="White"
                        BorderColor="White"
                        BorderThickness="5"
                        CornerRadius="0"
                        HeightRequest="120">
                        <Grid HorizontalOptions="FillAndExpand">
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="Auto" />
                            </Grid.RowDefinitions>
                            <Image
                                Grid.Row="0"
                                VerticalOptions="Center">
                                <Image.Source>
                                    <FontImageSource
                                        FontFamily="{StaticResource MaterialFontFamily}"
                                        Glyph="{Binding IncidenceGlyph}"
                                        Size="{StaticResource MaterialFontSize}"
                                        Color="White" />
                                </Image.Source>
                            </Image>
                            <Label
                                Grid.Row="1"
                                HorizontalOptions="Center"
                                HorizontalTextAlignment="Center"
                                Text="{Binding IncidentType}"
                                TextColor="White" />
                        </Grid>
                    </pancakeview:PancakeView>
                </DataTemplate>
            </CollectionView.ItemTemplate>
        </CollectionView>

My ViewModel has a property:

public Command<IncidentViewModel> ItemTappedCommand { get; set; }

Then simply used like this:

ItemTappedCommand = new Command<IncidentViewModel>(async (incidentViewModel) =>
                {
                    IReadOnlyList<Page> stack = CurrentPage.Navigation.NavigationStack;

                    if (stack[stack.Count - 1].GetType() != typeof(IncidentMediaPickerPage))
                    {
                        await CoreMethods.PushPageModel<IncidentMediaPickerPageModel>(incidentViewModel.Incident).ConfigureAwait(false);
                    }
                })

Not working on .net standard 2.0

I installed latest preview version of this package in my .net standard 2.0 project but it doesn't work. Any update expected to support .net standard 2.0?

Effect Not Working(Only Works On Double Tap)

Hi

As you can see above my issue is the effect only works when I double tap a layout(stacklayout). I tried creating a fresh project with one page thats exactly the same as the one that the plugin is not working on, except, the plugin works on that project. The only thing I can think of is, maybe your plugin is clashing with another plugin that I have installed in my project, for that reason I just wanted to show you all the packages I have installed and maybe you can tell me if you notice some familiar, problematic
plugins

<PackageReference Include="Newtonsoft.Json">
      <Version>11.0.2</Version>
    </PackageReference>
    <PackageReference Include="Plugin.Share">
      <Version>7.1.1</Version>
    </PackageReference>
    <PackageReference Include="Prism.Core">
      <Version>6.3.0</Version>
    </PackageReference>
    <PackageReference Include="Prism.Forms">
      <Version>6.3.0</Version>
    </PackageReference>
    <PackageReference Include="Prism.Unity.Forms">
      <Version>6.3.0</Version>
    </PackageReference>
    <PackageReference Include="Rg.Plugins.Popup">
      <Version>1.1.4.158-pre</Version>
    </PackageReference>
    <PackageReference Include="Xam.Plugins.Settings">
      <Version>3.1.1</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Facebook.iOS">
      <Version>4.24.0</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.FFImageLoading">
      <Version>2.3.6</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.FFImageLoading.Forms">
      <Version>2.3.6</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.FFImageLoading.Transformations">
      <Version>2.3.6</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Firebase.iOS.Analytics">
      <Version>4.0.5</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Firebase.iOS.CloudMessaging">
      <Version>2.0.8</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Firebase.iOS.Core">
      <Version>4.0.13</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Firebase.iOS.InstanceID">
      <Version>2.0.8</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Forms" Version="2.5.0.280555" />
    <PackageReference Include="ZXing.Net.Mobile">
      <Version>2.4.1</Version>
    </PackageReference>
    <PackageReference Include="ZXing.Net.Mobile.Forms">
      <Version>2.4.1</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Google.iOS.SignIn">
      <Version>4.1.1.1</Version>
    </PackageReference>
    <PackageReference Include="XamEffects">
      <Version>1.5.0</Version>
    </PackageReference>
  </ItemGroup>

thanks, much appreciated

AutoChildrenInputTransparent not work and not found

Hello,

I'm using a ListView. The ListViewItems contain labels and a frame. When I set the effect on the ListViewItem, the effect is shown, but the frame overlaps it.

The AutoChildrenInputTransparent property cannot be found or set either.

I use XamEffects version 1.6.3 and Xamarin Forms with version 4.4

Hide ripple effect in iOS.

Your plugin is good for showing ripple effect. But my problem is I want to show the touch effect on label in android only not on iOS. How is it possible to do so?

Crash if Navigation.PopAsync in tap command on Android

XAML

<Grid xe:TouchEffect.Color="Black"
	  xe:EffectsConfig.ChildrenInputTransparent="True"
	  xe:Commands.Tap="{Binding PageNavigationPopCommand}">

C#

PageNavigationPopCommand = new Command(async (dest) =>
{
	await Navigation.PopAsync(true);
});

If I write await Task.Delay(500) before PopAsync, there is no crash.

Question: button inside layout with effect

Thanks for the great plugin

In the following code snippet, the LongTap command works properly.
What should I do to make the button to response and call its command?

BTW - in my case, the Frame is inside a ViewCell of a ListView

<Frame BackgroundColor="White"
       BorderColor="Black">
    <StackLayout
        xamEffects:Commands.LongTap="{Binding DebugCommand}"
        xamEffects:Commands.LongTapParameter="long tap command">


        <Label Text="I am a label" />
        <Button Text="Click Me"
                InputTransparent="True"
                Command="{Binding DebugCommand}"
                CommandParameter="button command" />

    </StackLayout>
</Frame>

With regards

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.