🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

3586閲覧

AndroidstudioでLayoutの重なり順に影響されずViewの重なり順を変更したい。

Rayyd

総合スコア15

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2019/12/16 00:36

編集2019/12/16 00:47

やりたいこと

2つのviewがあります。2つのviewはそれぞれ違うlayout上にあります。ここでlayoutの重なり順に関係なくviewの重なり順を変更したいのですがどうしたらよいでしょうか。

##コード

XML

1<FrameLayout 2 android:layout_width="match_parent" 3 android:layout_height="match_parent" 4 android:id="@+id/layout1" 5 > 6 <ImageView 7 android:layout_width="40dp" 8 android:layout_height="20dp" 9 android:background="@color/colorAccent" 10 android:id="@+id/image1"/> 11 </FrameLayout> 12 <FrameLayout 13 android:layout_width="match_parent" 14 android:layout_height="match_parent" 15 android:id="@+id/layout2" 16 > 17 <ImageView 18 android:layout_width="20dp" 19 android:layout_height="40dp" 20 android:background="@color/colorPrimary" 21 android:id="@+id/image2"/> 22 </FrameLayout>

java

1public class MainActivity extends AppCompatActivity { 2 private FrameLayout layout1,layout2; 3 private ImageView imageView1,imageView2; 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.activity_main); 8 layout1=findViewById(R.id.layout1); 9 layout2=findViewById(R.id.layout2); 10 imageView1=findViewById(R.id.image1); 11 imageView2=findViewById(R.id.image2); 12 layout1.setZ(0); 13 layout2.setZ(1); 14 //imageview1をimageview2より上に表示したい。 15 } 16}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Layout に乗った View の重なり具合は Layout に準ずるはずと思います.
それぞれの View 間の重なりを変えたいのであれば, それぞれの Layout の重なり具合を変えるか, Layout を1つにまとめて View の重なりを変えることになるのではと思います.

投稿2019/12/16 06:53

jimbe

総合スコア13202

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Rayyd

2019/12/16 08:54

ご回答ありがとうございます。現在私は大量のviewを移動させるプログラムを作成しており, そのためにlayoutごと動かしたほうが効率が良いと考えたのです。何かほかに良い案がございましたらご回答をお願いします。
jimbe

2019/12/16 09:26

本来 View は静的な画面を構成するためのもので, 「大量の View を移動させる」という使い方を想定してあるとは思えません. 大量の View が任意に移動され, 任意に View として動作するのであれば, Layout による管理は捨てて, View の管理を自前で行うほうが良いのではないでしょうか.
Rayyd

2019/12/18 01:16

layoutごとの管理は難しいということですね。わかりました, ほかの方法を模索してみることにします。
jimbe

2019/12/18 04:06

ご提示のコードでは 2 つの View(Layout) のみですので, 大量の View をどういうタイミングでどう移動(重なりを変化)させようとされているのかが分かりません. もしかしたら, 考え方を変えると移動させなくても済むのかもしれないということも(回答者側からすると)可能性として考える程度に情報が足りません. 可能であれば, 何をしようとしてどう View を移動させようとされているのかを, ご質問に追加して頂ければ, もう少しでも具体的に考えられるかと思います.
Rayyd

2019/12/18 08:54 編集

なるほど!わかりました。ここに書かせてもらいます。viewをどう動かしたいかというと上,下,右,左,静止の5つです。viewの数はとにかく大量で(1000くらい)それぞれの動きにほぼ同じくらい分配されています。重なり順が必要な理由は奥行きを表現したいからです。現状すべてのviewにanimationを設定して動かしているように見せていますが, 大量のviewにそれぞれanimationを設定するのは大変処理が重く, layout事態にanimationを設定して行えないかと考えています。しかしその場合viewごとの重なり順を表現できないためこのような質問をしました。
jimbe

2019/12/18 15:45

1000 個もある View は一体何なのでしょう. その数だけでメモリ使用量・速度的に現実的では無いように思いますが. シューティングゲームのキャラチップ等でしょうか.
Rayyd

2019/12/19 05:28

一応4000個での動作は確認していますよ。画素数を減らせばなかなか行けるもんです。
jimbe

2019/12/19 13:11

> 一応4000個での動作は確認しています 凄い, 結構動くものなのですね. それで, それが単なる画像ではなく View なのはなぜなのでしょう.
Rayyd

2019/12/20 06:26

>それで, それが単なる画像ではなく View なのはなぜなのでしょう. 質問の意味がよくわかりませんが...一応たくさんのViewを使うのはそれぐらいたくさん表示するためです。じつは今までBitmapでがりがり描いたりして表示したりしていましたがメモリが足りなくて, 結局Viewをたくさん生成させたほうが効率が良いということがわかりました。
jimbe

2019/12/20 12:19

> Bitmapでがりがり描いたりして表示したりしていましたがメモリが足りなくて なるほど. 画像のほうがメモリを使ってしまっていたのですか. その Bitmap でのコードや動作も参考までに見てみたい気も致しますが... 可能でしたら View での実際に動作するコードをご提示いただくことは可能でしょうか. その上でどの View 間で上下を変えたいのかが分かれば, 例えばレイアウトマネージャを作ったりも可能では無いかと思います.
Rayyd

2019/12/23 00:28

コードを見てみたいですか。実はコードはすでに4000行を超えていて, 自分でも何が何だかわからない状態です。(笑)  多分提示しても変数の数が多すぎてよくご理解できないかと思います。ただ動作方法はすでにお伝えしたとおりですよ。framelayoutにviewを配置して上下左右にAnimationで動かしています。しかし奥行きを表現するためにviewの重なり順を変える必要があり, 今現在はその奥行きや動作ごとに330枚のframelayoutを用意して何とか表現しています。しかしそれでは不効率だと思いこのような質問をしました。
jimbe

2019/12/23 04:28

流石に4000行はこちらに掲載は無理ですね...なんとかコードと動作している状態を確認出来れば, 別の見方から何か少しでもお手伝いできるのではと思っているのですが.
Rayyd

2019/12/23 05:50

ありがとうございます。一応動きはしますので小手先の改良で頑張ってみようかと思います。ここまで付き合っていただきありがとうございました。ベストアンサーにしておきますね!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問