首页 > 解决方案 > 具有多个翻译坐标的 Android 大型画布无需触摸即可滚动到特定绘图

问题描述

在 android 中使用具有更大宽度和高度 1000x1000 并包裹在水平滚动视图中的自定义视图。并使用canvas.drawPath(path, paint)绘制路径

代码片段

<HorizontalScrollView
        android:id="@+id/horizontalScrollView"
        android:layout_width="125dp"
        android:layout_height="200dp">

        <LinearLayout
            android:id="@+id/childLinear"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <CustomCanvas
                android:id="@+id/canvas"
                android:layout_width="1000dp"
                android:layout_height="1000dp" />
        </LinearLayout>
    </HorizontalScrollView>

在开始绘制路径之前,使用canvas.translate(width / 2f, height / 2f)将原点移动到画布中心。

有一个小的水平滚动视口用于滚动,并且

需要滚动 drawPath 线始终在滚动视图视口中居中。

平移坐标后,起始 x,y 移动到中心,根据条件进行多次平移。

如何计算线的原始 x,y 位置并滚动到该图?

谢谢,帮助赞赏。

标签: androidcanvascoordinatesdrawtranslate

解决方案


我自己想通了,只是存储了视图 x,y 和画布翻译 x,y 之间的区别,如下所示。

var offsetX = width/2f
var offsetY = height/2f
translate(width/2f,height/2f)
offsetX+= 100
offsetY+= 100
translate(100,100)

所有画布操作结束,offsetX、offsetY 将拥有视图中最后绘制的坐标。


推荐阅读