我在Xamarin做自定义渲染器。我还不明白如何让它发挥作用。我按照以下说明操作: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/custom-renderer/view#Consuming_the_Custom_Control
但是没有解释如何创建android视图
CustomRenderer.Droid.CameraPreview
如果我创建一个Android视图,它只是一个cs文件而不是.xaml,我认为这很奇怪。
我创建了一个空的Android视图类,我尝试从我的android渲染器设置为我的Native控件:
SetNativeControl(view);
但它会生成一个TargetInvocationException。
这应该如何运作?
------- ------- EDIT
当我运行以下内容时,没有任何事情发生,我希望在视图中绘制按钮。
public class CameraRenderer : ViewRenderer<Controls.CustomControl, MainApplication.Droid.CameraPreview>
{
private CameraPreview view;
private Context thisContext;
LayoutInflater inflater2;
protected override void OnElementChanged(ElementChangedEventArgs<Controls.CustomControl> e)
{
base.OnElementChanged(e);
view = new CameraPreview(thisContext);
inflater2 = (LayoutInflater)thisContext.GetSystemService(Context.LayoutInflaterService);
inflater2.Inflate(Resource.Layout.layout1, view);
SetNativeControl(view);
}
public CameraRenderer(Context context) : base(context)
{
thisContext = context;
}
}
public class CameraPreview : ViewGroup
{
public CameraPreview(Context context) : base(context)
{
}
protected override void OnLayout(bool changed, int l, int t, int r, int b)
{
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:text="Button test"
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
答案 0 :(得分:0)
但是没有解释如何创建android视图
Here是如何创建android视图CameraPreview
的。或者您可能只是想知道如何使用SurfaceView到custom camera。
如果我创建一个Android视图,它只是一个cs文件而不是.xaml,我认为这很奇怪。
是的,android视图只是一个cs文件。 Here与TargetInvocationException
例外有关。
Here是如何在曲面视图中添加按钮。从中,您可以看到它使用.xml文件来实现UI布局。您还可以使用.axml文件来布局UI,并使用LayoutInflater
将布局扩展到视图。您可以使用ListView
适配器的getView
方法从here了解相关信息。
您可以直接在MainPage.xaml
上布置按钮,如下所示:
<RelativeLayout>
<!-- Place new controls here -->
<local:CameraPreview Camera="Rear"
x:Name="cp"
RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent,
Property=Height,Factor=.15,Constant=0}"
RelativeLayout.WidthConstraint="{ConstraintExpression
Type=RelativeToParent,Property=Width,Factor=1,Constant=0}"
RelativeLayout.HeightConstraint="{ConstraintExpression
Type=RelativeToParent,Property=Height,Factor=.8,Constant=0}"/>
<Button Text="AAAAAA"
RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToView,
ElementName=cp,Property=Y,Factor=1,Constant=20}"
RelativeLayout.XConstraint="{ConstraintExpression Type=RelativeToView,
ElementName=cp,Property=X,Factor=1,Constant=20}"
RelativeLayout.WidthConstraint="{ConstraintExpression
Type=RelativeToParent,Property=Width,Factor=.5,Constant=0}"
RelativeLayout.HeightConstraint="{ConstraintExpression
Type=RelativeToParent,Property=Height,Factor=.5,Constant=0}"/>
</RelativeLayout>