将自定义视图添加到在 PDFTron.Android for Xamarin 中不起作用的页面

Adding a custom view to a page not working in PDFTron.Android for Xamarin

我正在尝试将 PDFTron 用于 Xamarin Android。 我想渲染和绘制我的自定义注释,而不使用他们的注释系统。 根据他们在 https://www.pdftron.com/documentation/xamarin/guides/ui-customization/custom-view/android/ 中的文档,您可以添加一个不起作用的 CustomRelativeLayout。 它基本上不会在 PDF 顶部呈现任何内容

我在此处托管了整个解决方案 http://s000.tinyupload.com/index.php?file_id=14574507524295393508,因此很容易测试并查看是否有人可以看出问题所在。

谢谢!

更新

尝试了 Shirley G 的建议。将pdf_custom_layout修改为:

   <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="50dp"
    android:layout_height="50dp">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Custom Layout Text View"
        android:textSize="24dp"
        android:elevation="2dp"/>
    <View
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/holo_red_dark" />
</LinearLayout>

代码为:

 [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
    public class MainActivity : AppCompatActivity
    {
        private PDFViewCtrl _pdfControl;
        private PDFDoc _doc;        

        protected override void OnCreate(Bundle savedInstanceState)
        {
            PDFNet.Initialize(this, Resource.Raw.pdfnet, "Insert commercial license key here after purchase");
            base.OnCreate(savedInstanceState);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.activity_main);

            _pdfControl = FindViewById<PDFViewCtrl>(Resource.Id.pdfControl);

            var assets = this.Assets;
            using var sr = new StreamReader(assets.Open("dummy.pdf"));
            _doc = new PDFDoc(sr.BaseStream);
            _pdfControl.DocumentLoad += _pdfControl_DocumentLoad;
            _pdfControl.SetDoc(_doc);
        }

        private void _pdfControl_DocumentLoad(object sender, System.EventArgs e)
        {
            var overlay = new CustomRelativeLayout(BaseContext);

            var color = new Android.Graphics.Color(BaseContext.GetColor(Resource.Color.red));
            overlay.SetBackgroundColor(color);
            overlay.SetZoomWithParent(true);

            LayoutInflater.Inflate(Resource.Layout.pdf_custom_layout, overlay);

            _pdfControl.AddView(overlay);
        }

但是什么也没发生,仍然没有显示叠加。

更新 2

我添加了修复程序并开始工作,但是,当我添加此代码时:

var overlay = new CustomRelativeLayout(BaseContext, _pdfControl, 50, 50, 1);

            overlay.SetBackgroundColor(BaseContext.Resources.GetColor(Resource.Color.orange));
            overlay.SetZoomWithParent(true);


            _pdfControl.AddView(overlay);
            overlay.LayoutParameters.Width = 300;
            overlay.LayoutParameters.Height = 300;


            _pdfControl.Invalidate();
            overlay.RequestLayout();

我在页面位置 x=50 和 y50 处看到一个 50x50 的小矩形。我指定叠加层的宽度为 300,但它没有显示。

如果我添加这个,什么也不会显示,即使在 x=0,y =0 处的叠加层应该是 300x300。

var overlay = new CustomRelativeLayout(BaseContext, _pdfControl, 0, 0, 1);

需要将布局添加到视图层次结构(即 PDFViewCtrl.AddView),这在您的项目中没有完成。您可以在此处找到工作示例:

https://github.com/PDFTron/pdftron-android-samples/tree/master/CustomUI

具体来说,相关代码可以在这里找到: https://github.com/PDFTron/pdftron-android-samples/blob/master/CustomUI/app/src/main/java/com/pdftron/android/tutorial/customui/custom/CustomLinkClick.java

示例将布局添加到第 3 页,因为您的 pdf 文件只有 1 页,您需要在 XML 布局中将其更改为第 1 页。请注意,所有 posX 和 poxY 都在页面 space 中,而不是屏幕 space。在此处阅读有关该主题的更多信息: https://www.pdftron.com/documentation/android/guides/basics/coordinates

考虑到这一点,运行您的项目将看到:

布局:

<pdftron.PDF.Tools.CustomRelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="50dp"
    android:layout_height="50dp"
    app:posX="50"
    app:posY="50"
    app:pageNum="1"
    app:zoomWithParent="true">
    <!--Child views under CustomRelativeLayout-->
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Custom Layout Text View"
        android:textSize="12sp"
        android:elevation="2dp"/>
    <View
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/holo_red_dark" />
</pdftron.PDF.Tools.CustomRelativeLayout>

如果以编程方式添加视图,则需要指定位置,或者如果将其放在注释上,则可以指定注释。

通常看起来像这样:

CustomRelativeLayout overlay = new CustomRelativeLayout(context);
overlay.setBackgroundColor(context.getResources().getColor(R.color.orange));
overlay.setAnnot(pdfViewCtrl, annot, pageNum);
overlay.setZoomWithParent(true);
pdfViewCtrl.addView(overlay);