自定义Xamarin Android渲染器

时间:2018-05-23 08:17:12

标签: c# android xamarin

我在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>

1 个答案:

答案 0 :(得分:0)

  

但是没有解释如何创建android视图

Here是如何创建android视图CameraPreview的。或者您可能只是想知道如何使用SurfaceViewcustom camera

  

如果我创建一个Android视图,它只是一个cs文件而不是.xaml,我认为这很奇怪。

是的,android视图只是一个cs文件。 HereTargetInvocationException例外有关。

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>