Xamarin.Android

时间:2015-10-13 20:01:36

标签: android xamarin

我正在尝试在Xamarin.Android平台上获取屏幕截图。

public static Android.Content.Context Context { get; private set; }

public override View OnCreateView(View parent, string name, Context context, IAttributeSet attrs)
{
    MainActivity.Context = context;
    return base.OnCreateView(parent, name, context, attrs);
}

我试图找出以下rootView.WidthHeight一直返回0的原因。

var rootView = ((Activity)MainActivity.Context).Window.DecorView.RootView;
Console.WriteLine ("{0}x{1}", rootView.Width,rootView.Height);

我的最终目标是将视图的屏幕截图捕获为图像并生成pdf。

2 个答案:

答案 0 :(得分:1)

我不了解Xamarin,但这个解决方案似乎与原生Android相同。

当调用onCreateView()时,尚未测量视图。要获取视图尺寸,您应该附加特定的侦听器:onLayoutChangeListener

以下是Android原生代码示例:

rootView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
    @Override
    public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop,
        int oldRight, int oldBottom) {
        int width = right - left;
        int height = bottom - top;
        v.removeOnLayoutChangeListener(this); // Remove the listener
    }
});

您可以找到here侦听器用于Xamarin

希望它的帮助! :)

答案 1 :(得分:1)

在onCreateView中的宽度和宽度对象的高度尚未定义。它们是在活动生命周期的后期阶段定义的。

你必须使用treeviewobserver。

rootview示例:

rootView.ViewTreeObserver.GlobalLayout += (object sender, EventArgs e) => {
      Console.WriteLine ("{0}x{1}", rootView.Width,rootView.Height);
};

在那种方法中宽度&高度将是已知的。

此外,您想要拍摄您的rootview图片,最好的方法是使用此方法,这会自动将视图的Bitmap输出到变量b。

rootView.DrawingCacheEnabled = true;
Bitmap b = rootView.GetDrawingCache(true);

希望这能让你顺利上路!