imageView の上に imageView を重ねて表示し、上のimageView だけドラッグ&リリースで移動可能にするには?

3,768 views
Skip to first unread message

kasatoru

unread,
May 12, 2011, 7:16:49 AM5/12/11
to 日本Androidの会
Android開発初心者です。
実装したいのは以下なのですが、どなたか方法についてご教授いただけないでしょうか

<仕様>
 ・背景画像を表示
 ・背景画像上をドラッグ&リリースで移動できる画像を表示
 ※背景画像と移動画像のサイズは異なっていて、移動画像の方が小さいです。

調べたところ、FrameLayoutを使用すればimageViewを重ねることは出来るそうですが、
FrameLayoutを使用すると移動用のimageViewをドラッグ操作で移動できないように思われます。

imageView の上に imageView を重ねて表示し、上のimageView だけドラッグ&リリースで移動可能にするには
どうしたらよいのでしょうか?

adachi

unread,
May 13, 2011, 8:54:04 AM5/13/11
to 日本Androidの会
kasatoru さんこんにちは。


adachi です。


Activity上の直接乗っていないので、動かないかもしれませんね。
もしくは、Layoutの上に乗せると固定されてしまうのかもしれません。
(そんな理由簡単なでないかもしれませんが・・・)


やり方は色々あると思いますが、自分ならこうするという方法を書いていきます。

1.FrameLayoutに同じ大きさのimageViewを重ねます。
2.移動画像を描くの方のViewは、背景を透過させます。
3.ドラッグ&リリースのたびに、カーソルの座標を取得し、drawBitmap(など画像を描ける処理)を行います。

上のViewの背景を透けさせて、さも画像が移動しているように見せる考えです。
移動させる画像は、描画した方がすんなり行くように思えます。

imageViewを動かせというルールがあった場合は、
私の言った方法は使えませんが、少し説明を拝見させて頂いて、
上記の方法をまず考えました。

予想と違った解答になっていたら、申し訳ありません。

yuka2py

unread,
May 13, 2011, 10:12:51 AM5/13/11
to android-g...@googlegroups.com
kasatoru さん、

こんばんわ。ゆぅかです。
記載された限りの要件では、ImageView を重ねるよりは、LinearLayout や、
RelativeLayout の android:background でを指定した方が良いように思いました。
そして、背景画像を設定したレイアウトの中に、ドラッグ&ドロップしたい ImageView を置きます。

上に乗る小さな ImageView が複数の場合もありそうなので、RelativeLayout が良いかも、です。
で、RelativeLayoutなら、中に置く ImageView に、android:layout_alignParentTop="true"、
android:layout_alignParentLeft="true" をセットして、あとはマージンで ImageView の
表示位置をコントロールする、というのはどうでしょうか?

(でも、実は試してないので、出来ないことを書いてたらすみません ^-^;)

よろしくお願いいたします。

-- ゆぅか。


2011年5月12日20:16 kasatoru <kasato...@gmail.com>:

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>
>

kasatoru

unread,
May 16, 2011, 7:26:24 AM5/16/11
to 日本Androidの会
adachiさん、回答ありがとうございます。

移動画像のサイズを背景画像と同じサイズで定義して、透過で描画する方法ですね!
こんな方法があることに気づきませんでした。

カーソル移動するたびに再描画処理を行うと思うので、
性能面で少し心配ですが、ご教授頂いた内容で実装できそうです。

とても参考になりました。ありがとうございます。
> > どうしたらよいのでしょうか?- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

kasatoru

unread,
May 16, 2011, 7:29:05 AM5/16/11
to 日本Androidの会
ゆぅかさん、回答ありがとうございます。

質問事項に条件の記載が漏れており申し訳ないのですが、
今回の場合は背景画像を拡大する場合があります。
そのため、 android:background で単純に指定することはできなさそうですが、
指定前に背景画像サイズ等を先に変更してしまえば実装できそうな気がします。

ImageViewを重ねなくてもマージンの調整で実装できそうな方法があるということで、
実際に試してみたいと思います。

ありがとうございます。とても助かりました。

On 5月13日, 午後11:12, yuka2py <yuka...@gmail.com> wrote:
> kasatoru さん、
>
> こんばんわ。ゆぅかです。
> 記載された限りの要件では、ImageView を重ねるよりは、LinearLayout や、
> RelativeLayout の android:background でを指定した方が良いように思いました。
> そして、背景画像を設定したレイアウトの中に、ドラッグ&ドロップしたい ImageView を置きます。
>
> 上に乗る小さな ImageView が複数の場合もありそうなので、RelativeLayout が良いかも、です。
> で、RelativeLayoutなら、中に置く ImageView に、android:layout_alignParentTop="true"、
> android:layout_alignParentLeft="true" をセットして、あとはマージンで ImageView の
> 表示位置をコントロールする、というのはどうでしょうか?
>
> (でも、実は試してないので、出来ないことを書いてたらすみません ^-^;)
>
> よろしくお願いいたします。
>
> -- ゆぅか。
>
> 2011年5月12日20:16 kasatoru <kasatoru4...@gmail.com>:
>
>
>
> > Android開発初心者です。
> > 実装したいのは以下なのですが、どなたか方法についてご教授いただけないでしょうか
>
> > <仕様>
> >  ・背景画像を表示
> >  ・背景画像上をドラッグ&リリースで移動できる画像を表示
> >  ※背景画像と移動画像のサイズは異なっていて、移動画像の方が小さいです。
>
> > 調べたところ、FrameLayoutを使用すればimageViewを重ねることは出来るそうですが、
> > FrameLayoutを使用すると移動用のimageViewをドラッグ操作で移動できないように思われます。
>
> > imageView の上に imageView を重ねて表示し、上のimageView だけドラッグ&リリースで移動可能にするには
> > どうしたらよいのでしょうか?
>
> > --
> > このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> > このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> > このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> > 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。- 引用テキストを表示しない -
>
> - 引用テキストを表示 -
Reply all
Reply to author
Forward
0 new messages