私は昨日、Androidのレイアウト(...またはより良いカスタムレイアウト)に苦労して過ごしました。一般的な目的では、Androidが提供するすぐに使えるレイアウトで十分です。しかし、より複雑なユースケース(楕円軌道上に配置された画像が重なっているカルーセルの例を見てみましょう)に関しては、AndroidAPIの制限と複雑さにすぐに気付きました。これが私のアプローチでした:
すぐに使用できるレイアウトを使用することはできません(処理する多くの管理できない問題に対して)が、変換、回転、など...組み込みのアニメーションを介して。
AbsoluteLayoutは、この目的に使用できる最も妥当なレイアウトのようです。派生ビューオブジェクトを追加し、それらを配置するための独自のアルゴリズムを作成できます。しかし...それは非推奨です。残念です!非推奨のAPIを使用したいのは誰ですか?
次に行うべき最も合理的なことは、神秘的なViewGroupをサブクラス化する独自のレイアウトを作成することです。ここで、すべてがバラバラになります(少なくとも私にとってはそうです)。スイング用に独自のカスタムレイアウトを作成するのと同じくらい、複雑で誤解を招きやすく、注意が必要です(実際には何年も前に作成しましたが、もっと簡単なことを覚えています)。
次に、(必死になって)ビューをサブクラス化し、onDrawメソッドをオーバーライドして、Canvasに直接描画することが、唯一の簡単な解決策のようです(ただし、これはjava2Dの時代を思い出させます...プロジェクト)、しかし、あなたはキャンバスに描かれたグラフィックスに適用したい便利な組み込みのアニメーションAPIをあきらめています。
結論として、私が何かを見逃していない限り、現在のandroidアーキテクチャは、flashやjavafxなどの他のUIテクノロジーによって提供されるプログラミングパラダイムから少し離れています(上記のカルーセルはjavafxとflashで簡単に実装できます)。その理由は、たとえばjavafxでは、Sceneオブジェクト(androidのViewの概念に匹敵する)がデフォルトで絶対レイアウトを提供するためです。その後、必要に応じて、他のすぐに使用できるレイアウトを適用できます。ただし、カスタムレイアウトが必要なシナリオでは、何もする必要はありません。
このオプションがAndroidで利用できないことに少し驚いています。結局のところ、他のUIテクノロジーによって対処される非常に一般的なニーズです。私はまだ私が見つけていないアンドロイドの5番目のオプションがあると思うのが好きです。トピックに関する情報を提供できる専門家はいますか?
ありがとう。