Search code examples
c#xamarin.androidlistenerfloating-action-button

Xamarin android - How to add addOnPreDrawListener for viewgroup in c#


I am tryign to create a extended FAB menu in xamarin android(c#). I have following this article(https://blog.stylingandroid.com/floating-action-button-part-3/), convered all from java code to c# except adding "addOnPreDrawListener" listener for fabContainer(ref to below code)

 final ViewGroup fabContainer = (ViewGroup) findViewById(R.id.fab_container);
 fabContainer.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        @Override
        public boolean onPreDraw() {
            fabContainer.getViewTreeObserver().removeOnPreDrawListener(this);
            offset1 = fab.getY() - fabAction1.getY();
            fabAction1.setTranslationY(offset1);
            offset2 = fab.getY() - fabAction2.getY();
            fabAction2.setTranslationY(offset2);
            offset3 = fab.getY() - fabAction3.getY();
            fabAction3.setTranslationY(offset3);
            return true;
        }
    });

I am tring to do following but OnPreDrawListener class is not available in xamarin android.

  ViewTreeObserver treeObserver = fabContainer.ViewTreeObserver;
        treeObserver.AddOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener
        {
        });

Please guide me.

Thanks

@paul


Solution

  • How to add addOnPreDrawListener for viewgroup in c#

    As @Dharmik Patel said, you could implement the ViewTreeObserver.IOnPreDrawListener in your Activity

    public class MainActivity : AppCompatActivity, ViewTreeObserver.IOnPreDrawListener
    {
        ...
        fabContainer.ViewTreeObserver.AddOnPreDrawListener(this);
        ...
    
        public bool OnPreDraw()
        {
            //Do your logic 
        }
    }
    

    Alternative choice :

    class MyOnPreDrawListener : Java.Lang.Object, ViewTreeObserver.IOnPreDrawListener
    {
        private MainActivity mainActivity;
    
        public MyOnPreDrawListener(MainActivity mainActivity)
        {
            this.mainActivity = mainActivity;
        }
    
        public bool OnPreDraw()
        {
           //Do your logic 
        }
    }
    
    fabContainer.ViewTreeObserver.AddOnPreDrawListener(new MyOnPreDrawListener(this));