Пользовательский Xamarin Android рендерер - PullRequest
0 голосов
/ 23 мая 2018

Я делаю пользовательский рендер в 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:

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 голосов
/ 24 мая 2018

Но не объясняется, как создать представление для Android

Здесь - это как создать представление для Android CameraPreview.Или, может быть, вы просто хотите узнать, как использовать SurfaceView до пользовательской камеры .

Если я создаю представление Android, это только файл CS, а не.xaml, который я тоже считаю странным.

Да, представление Android - это только CS-файл. Здесь соответствует исключению TargetInvocationException.

Здесь - Как добавить кнопку в виде поверхности.Из этого вы можете видеть, что он использует .xml файл для достижения макета пользовательского интерфейса.Вы также можете использовать файл .axml для разметки вашего пользовательского интерфейса и использовать LayoutInflater для раздувания вашего разметки в виде.Вы можете узнать это из здесь , в методе ListView адаптера getView.

Редактировать:

Вы можете разместить на нем кнопку прямо в 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...