c# - Xamarin android - 如何在 c# 中为 viewgroup 添加 addOnPreDrawListener

标签 c# xamarin.android listener floating-action-button

我正在尝试在 xamarin android(c#) 中创建扩展的 FAB 菜单。我关注了这篇文章( https://blog.stylingandroid.com/floating-action-button-part-3/ ),除了添加“addOnPreDrawListener”之外,将所有内容从 java 代码转换为 c# fabContainer 的监听器(引用下面的代码)

 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;
        }
    });

我正在尝试执行以下操作,但 OnPreDrawListener 类在 xamarin android 中不可用。

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

请指导我。

谢谢

@保罗

最佳答案

How to add addOnPreDrawListener for viewgroup in c#

正如 @Dharmik Patel 所说,您可以在 Activity 中实现 ViewTreeObserver.IOnPreDrawListener

public class MainActivity : AppCompatActivity, ViewTreeObserver.IOnPreDrawListener
{
    ...
    fabContainer.ViewTreeObserver.AddOnPreDrawListener(this);
    ...

    public bool OnPreDraw()
    {
        //Do your logic 
    }
}

替代选择:

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)); 

关于c# - Xamarin android - 如何在 c# 中为 viewgroup 添加 addOnPreDrawListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47130705/

相关文章:

java - Swing中是否有监听启用/禁用事件的监听器?

android - android中的监听器与处理程序

c# - ASP.Net TableHeaderRow Controller 产生 tr 而不是 th

c# - 使用 Jet 的 OleDbDataAdapter 数据类型不匹配

c# - 在 .net 中使用 FFmpeg?

c# - 使用 async/await 仍然会阻止 Xamarin.Android 上的 UI

c# - (Unity 2D)在离开屏幕时销毁实例化的预制件?

android - 在模拟器上安装 com.google.android.gms,数据包存在错误

c# - 在我的 visual studio 中找不到运行我的 android 应用程序的模拟器设备

java - 检测文本控件中的插入符号移动