8

NineOldAndroidsライブラリを使用して、カスタムレイアウトをスケーリングします。

public class MyLayout extends FrameLayout {
  // LayoutParams.MATCH_PARENT and all.
  ...
  @Override
  public boolean setPositionAndScale(ViewGroup v, PositionAndScale pas, PointInfo pi) {
    ...
    mScale = pas.getScale();
    ViewHelper.setScaleX(this, mScale);
    ViewHelper.setScaleY(this, mScale);
  }
}

FrameLayoutとAbsoluteLayoutを試しました。すべて同じ効果があります。mScale < 1.0 スケーリング/ズームは機能するが、レイアウトの一部がクリップされている場合。

mScale = 1.0:

mScale = 1.0

mScale < 1.0: スケーリング/ズームは機能しますが、レイアウトがクリップされます

mScale <1.0

この問題を解決するにはどうすればよいですか?

編集:写真はICSで撮影されました。だから私はそれがNineOldAndroidsの問題ではないと思います。

4

5 に答える 5

3

誰かが私と同じ状況に陥った場合に備えて。私はこのアプローチを使用することになりました:

protected void setScale(float scale, boolean updateView) {
    mScale = scale;
    if (updateView) {
        LayoutParams params = getLayoutParams();
        onUpdateScale(scale, params);
        setLayoutParams(params);
    }
}

protected void onUpdateScale(float scale, LayoutParams params) {
    params.leftMargin = (int) (mModel.getX() * scale);
    params.topMargin = (int) (mModel.getY() * scale);
    params.width = (int) (mModel.getWidth() * scale);
    params.height = (int) (mModel.getHeight() * scale);
}
于 2012-11-13T22:12:06.843 に答える
1

APIレベル11以降、ViewクラスにはメソッドがsetScaleX()ありsetScaleY()、期待どおりに機能し、スケーリングされたビューのサブビューもスケーリングします。だから、それがあなたのための方法であるなら、ライブラリをドロップして、ただやってください

v.setScaleX(mScale);
v.setScaleY(mScale);
于 2012-09-14T05:42:35.387 に答える
0

私が問題を正しく理解していれば、ビュー グループをスケーリングしていて、それに応じて含まれるビューがスケーリングされることを期待しています。ビューグループを拡大縮小するとサイズが変わりますが、その子ビューは変わりません。

すべてのサブビューをスケーリングするだけです。それでも、テキストと画像が自動的にスケーリングされるかどうかはわかりません。必要なのは拡大縮小ではなくズームです。このリファレンスを試してください。

于 2012-09-13T18:35:04.960 に答える
0

ViewGroup.layout を使用します。これは、ViewGroup をスケーリング (&move) する最も簡単な方法かもしれません。

于 2013-01-23T15:10:55.743 に答える