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 に答える