ゲーム用の Android カスタム コンポーネントを作成したいと考えています。基本的な考え方は、カスタム コンポーネントの形状が正方形で、その中に他の正方形の ImageView コンポーネントが含まれているというものです。内部の ImageView コンポーネントは、必要に応じて拡大または縮小できますが、正方形のままにする必要があります。行数 == 列、常に。難易度によって、実行時の行と列の正確な値が決まります。ゲームが難しくなるにつれて、行と列の数は等しく増加しますが、各 ImageView のスケーリングされたサイズはそれに応じて縮小します。ほとんどの場合、見栄えがよくなるように、コンポーネント間に一定の小さな間隔を置きたいと思います。ディスプレイはスクロールできません。すべてのアイテムが同時にディスプレイに収まる必要があります。
何度も失敗した後、私はイライラしてきており、このカスタム コンポーネントを作成するのが最善の方法であることがわかりません。
私の最新のアイデアは、おおよそ次のことを行うことです。
「FrameLayout を拡張」して、カスタム コンポーネント クラスを作成します。私のコンストラクターでは、任意の小さな正方形の ImageView オブジェクトをコードで作成します。いつか私のカスタム コンポーネントを他の人に再利用してもらいたいので、カスタム コンポーネントが外部 XML ドローアブルの定義に依存しないように、XML ではなくコードでそれを行います。ImageView が「直角」を維持するようにスケール タイプを設定します (fitStart が必要だと思いますか?)。正方形の ImageView の layout_width と layout_height を「fill_parent」に設定したため、ImageView は、含まれている FrameLayout で利用可能なスペースをできるだけ大きく埋めます。addView() を使用して、大きくて正方形の ImageView をレイアウトに追加します。
次に、RelativeLayout オブジェクトを作成し、addView() を使用してプログラムで自分自身に追加します。私の基本クラスは FrameLayout であるため、これにより RelativeLayout のサイズが以前に追加した正方形の ImageView と同じになると思います。少なくとも私はそのようにドキュメントを読みました。
次に、ImageView を測定して、その大きさを確認します。以前の試みがこれで失敗したため、自分自身を測定できるとは思いません。私は自分のサイズで0を取得し続けました。私の調査によると、これは建設中に自分自身を測定できないためです。これがCatch-22になりました。使用可能なスペースに合わせて画像を拡大しようとしたとき、まだ使用可能なスペースがなかったためできませんでした。私の希望は、FrameLayout を基本クラスとして使用するように変更し、そこに ImageView を追加したため、新しく作成され、正しくスケーリングされた大きな正方形の ImageView を測定できるようになることです。
すべてが計画どおりに進むと、ImageView と同じであるため、ユーザーのデバイスで RelativeLayout に使用できるスペースの大きさがわかります。使用可能なスペースの量と、表示する必要がある行と列の数を把握することで、追加する ImageView 間の間隔を考慮することを覚えていると仮定して、追加する各 ImageView を適切にスケーリングできます。これで、正方形の ImageView は不要になり、必要に応じて削除できます。
合理的であれば、大きな ImageView の角を丸くし、追加された各 ImageView も角を丸くしたいと思います。ImageViews の間に小さなギャップを追加すると、これはゲームプレイにとってクールに見えます。このように、背景として残すことができます。
これは良い解決策のようで、うまくいかなかった私の以前の試みよりも優れていますが、もっと良い方法があれば...、私は聞いています.
私の理解の範囲内で、上記とほとんど同じことを言っている疑似コードを次に示します。
コンストラクト() { ImageView squareImageView = new ImageView(Square); LayoutParams squareImageLayoutParams = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); squareImageLayoutParams.addRule(fitStart); addView(squareImageView, squareImageLayoutParams); RelativeLayout relativeLayout = new RelativeLayout(context); LayoutParams relativeLayoutParams = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); addView(relativeLayout, relativeLayoutParams); int size = squareImageView.getWidth(); // スケーリングされたサイズと正方形でなければなりません。 squareImageView.setVisibility(INVISIBLE); // 多分? 各行と列のループ { 各画像をトリミング、スケーリングし、relativeLayout オブジェクトに追加します。 } }
私の最も基本的な質問は、これが合理的な解決策のように見えるかどうかです。もしそうなら、疑似コードには(まだ)やり方がわからないことがたくさんあります。
- コードで小さな正方形の ImageView を作成するにはどうすればよいですか?
- コードで scaleType を設定するにはどうすればよいですか?
- 正方形の ImageView を測定して正しいサイズを取得できますか?
- 非表示にする以外に、正方形の ImageView を削除するより良い方法はありますか?
- 正方形の ImageView を非表示にすると測定不能になりますか?
- ShapeDrawable と呼ばれるものがありますが、これは正方形を作成するための ImageView よりも優れていますか?
- ImageView を正方形にトリミングして、損失を両側に均等に分配するにはどうすればよいですか?
もちろん、これらすべての回答を知っている人はいないと思いますが、共有できる回答があれば教えていただければ幸いです。
ありがとう。