我正在尝试在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.Width
和Height
一直返回0的原因。
var rootView = ((Activity)MainActivity.Context).Window.DecorView.RootView;
Console.WriteLine ("{0}x{1}", rootView.Width,rootView.Height);
我的最终目标是将视图的屏幕截图捕获为图像并生成pdf。
答案 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);
希望这能让你顺利上路!