10

複雑なレイアウトのアプリに取り組んできました。最近、レイアウトの一部またはすべてをズーム可能にする必要があることに気付きました。

メインの xml ファイルの 1 つに、ビューを適切に配置するために複数のレイアウトがネストされた線形レイアウトがあります。この線形レイアウトとその中のすべてをズーム可能にする簡単な方法はありますか? それとも、レイアウト ファイル全体をズーム可能にする方が簡単でしょうか? 私のオプションは何ですか?

4

2 に答える 2

4

まず、その特定のビューでそのクラスを拡張します

   public class MyImageView extends ImageView{

次のメソッドをオーバーライドします。

 @Override
 protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
 canvas.save();

 canvas.scale(mScaleFactor, mScaleFactor, midPoint.x, midPoint.y);
 if(appInitialized) {

 hsSide.draw(canvas);
 scaleA.draw(canvas);
 scaleB.draw(canvas);

  }

 canvas.restore();


}

ズームされたオブジェクトのサイズを検出するジェスチャー検出器を作成し、オーバーラップを避けるために制限できます。

       private class ScaleListener extends    ScaleGestureDetector.SimpleOnScaleGestureListener {

 @Override
 public boolean onScale(ScaleGestureDetector detector) {

  mScaleFactor *= detector.getScaleFactor();
  pivotX = detector.getFocusX();
   pivotY = detector.getFocusY();
     // Don't let the object get too small or too large.
   mScaleFactor = Math.max(0.8f, Math.min(mScaleFactor, 2.0f));

    invalidate();
   return true;
   }
 }

最後にオブジェクトを初期化します

    ScaleGestureDetector mScaleDetector;



   mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());
于 2013-01-24T08:06:29.490 に答える
1

静的変換を見たことがあるかもしれません。いずれViewGroupかまたはサブクラスをカスタマイズして、その子ビューに変換を適用できます。これを有効にするには、 を呼び出してから、カスタムでコールバック (ドキュメント リンク) をsetStaticTransformationsEnabled(true)オーバーライドします。ズーム効果を作成するためのスケールなど、任意の変換を適用できます。このコールバックは、ビューを再描画する必要があるか無効化されるたびに呼び出されます。getChildStaticTransformation()ViewGroup

また、これをハードウェア アクセラレーションと併用する場合は注意してください。変換を更新する必要がある頻度によっては、ハードウェアが期待どおりに再描画できない場合があります。その場合、このビュー階層のソフトウェア レイヤーを有効にする必要があります。

于 2013-01-15T04:31:31.233 に答える