自定义视图与Xamarin.Android中的滚动

时间:2017-04-14 13:14:14

标签: xamarin xamarin.android

我必须在Xamarin.Android应用程序中显示一个大图,用户必须能够水平和/或垂直滚动​​它。
答:我的第一个想法是创建一个自定义视图(继承自View),它在OnDraw中处理绘图,然后将自定义视图放在ScrollView中。但在这种情况下我不知道:

  1. 如何告诉ScrollView它有多少滚动内容;
  2. 我如何在自定义视图中知道滚动的位置,以便我可以绘制图表的相应部分(我只想绘制可见的部分)。
  3. 仅仅是为了测试我尝试了下面的布局,但是我无法滚动它:

    <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:id="@+id/btnLoadDiagram"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Load Diagram" />
      <ScrollView
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:fillViewport="true"
         android:scrollbars = "vertical"
         android:scrollbarStyle="insideInset" >
        <my.namespace.DiagramView
          android:layout_width="2000dp"
          android:layout_height="2000dp"
          android:id="@+id/diagramView" />
      </ScrollView>
    </LinearLayout>
    

    B中。第二个想法是从ScrollView继承,但我需要在水平和垂直方向上滚动。

    这里推荐的方法是什么?

1 个答案:

答案 0 :(得分:1)

最后,我实施了一个基于选项A的解决方案。
我实现了一个继承自Android.Views.View的自定义视图。该视图实现了GestureDetector.IOnGestureListener和ScaleGestureDetector.IOnScaleGestureListener接口,用于滚动和缩放。在内部,我会跟踪当前内容位置,并仅绘制适合视图区域的内容。