0

我有一个线性布局的视图。该应用程序是音乐符号,它是一系列换行的音乐条,因此它们始终小于屏幕宽度(无水平滚动)。当乐谱变得太大而无法查看时,会有一个垂直滚动条。到目前为止,一切都很好。我可以上下滚动很好。

现在我正在实现捏缩放,我在 ScaleGestureDetector 中设置了一个 onScale,保存比例因子,无效并在 onDraw 中我使用像这样的比例因子 canvas.scale(mScaleFactor, mScaleFactor);

它可以缩放视图,除了它没有完全按照我想要的方式进行。我希望画布的绘图区域像它一样缩放,但滚动条保持在原位,但缩放将其发送到一边,看不见。

知道如何缩放视图而不是滚动条吗?

顺便说一句,我可以通过将比例因子应用于宽度来重新计算音乐条的换行位置,这实际上只是滚动条显示的问题。

谁能帮忙?谢谢

4

1 回答 1

0

我想出了办法。我需要将滚动条的绘制与主乐谱视图的绘制分离。这样我就可以在不影响滚动条的情况下缩放主符号视图。

所以我使用线性布局来创建 2 个视图 -

layout.setLayoutParams(new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.MATCH_PARENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT, 
                    100));
            layout.setOrientation(LinearLayout.HORIZONTAL);

            Globals.mMainView = new MainView(context);
            Globals.mMainView.setLayoutParams(new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 60));
            layout.addView(Globals.mMainView);

            Globals.mScrollbarView = new ScrollbarView(context);
            Globals.mScrollbarView.setLayoutParams(new LinearLayout.LayoutParams(20, LinearLayout.LayoutParams.WRAP_CONTENT, 0));
            layout.addView(Globals.mScrollbarView);

然后我从 MainView 中删除滚动条的显示并将它们放在 ScrollbarView 中。

然后我在 ScrollbarView 中使用 onScroll 事件来控制 MainView 中的滚动。我必须记住从 ScrollbarView.computeVerticalScrollRange 返回 MainView 的实际显示长度,以便滚动条大小显示正常。

因为我参考了保存为全局变量的两个视图,所以它们很容易在必要时相互交谈。

于 2013-01-13T02:58:14.380 回答