gpt4 book ai didi

c# - Android 单声道中的 OnGlobalLayoutListener

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:00:40 27 4
gpt4 key购买 nike

谁能用 C# 向我解释这段 Java 代码,因为我在 Android 上使用 Mono?例如,我在 Android 的 Mono 中找不到 OnGlobalLayoutListener。

在 Android 上它看起来像这样:

vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int newWidth, newHeight, oldHeight, oldWidth;

//the new width will fit the screen
newWidth = metrics.widthPixels;

//so we can scale proportionally
oldHeight = iv.getDrawable().getIntrinsicHeight();
oldWidth = iv.getDrawable().getIntrinsicWidth();
newHeight = Math.floor((oldHeight * newWidth) / oldWidth);
iv.setLayoutParams(new LinearLayout.LayoutParams(newWidth, newHeight));
iv.setScaleType(ImageView.ScaleType.CENTER_CROP);

//so this only happens once
iv.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
});

Android 的 Mono 等效项是什么?

最佳答案

OnGlobalLayoutListener 是一个接口(interface),所以在 C# 中它被公开为 ViewTreeObserver.IOnGlobalLayoutListener .由于 C# 不支持在 Java 中看到的匿名类,因此您需要提供该接口(interface)的实现并将其传递到 AddOnGlobalLayoutListener() 中。 :

public class MyLayoutListener : Java.Lang.Object, ViewTreeObserver.IOnGlobalLayoutListener
{
public void OnGlobalLayout()
{
// do stuff here
}
}

vto.AddOnGlobalLayoutListener(new MyLayoutListener());

如果需要,您可以这样做,但在 Mono for Android 中,首选方法是使用事件代替监听器接口(interface)。在本例中,它显示为 GlobalLayout。事件:

vto.GlobalLayout += (sender, args) =>
{
// do stuff here
};

您可以像这样获取 ViewTreeObserver 的实例:

var contentView = activity.Window.DecorView.FindViewById(Android.Resource.Id.Content);
contentView.ViewTreeObserver.GlobalLayout += ViewTreeObserverOnGlobalLayout;

关于c# - Android 单声道中的 OnGlobalLayoutListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14158616/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com