質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Android

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

Q&A

解決済

2回答

1750閲覧

AndroidでのImageViewのドラッグ

maru2213

総合スコア16

Android

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

0グッド

0クリップ

投稿2018/09/22 04:07

Androidで、ImageViewをドラッグ、動的に位置を変更したいです。
自分でggって調べてみたところ、このページにたどり着きました。
このページのコードについて質問なのですが、以下の文で、rightMarginとbottomMarginを-250に設定しているのはなぜでしょうか?
ご教授よろしくお願いします。

java

1case MotionEvent.ACTION_MOVE: 2 RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view.getLayoutParams(); 3 layoutParams.leftMargin = X - _xDelta; 4 layoutParams.topMargin = Y - _yDelta; 5 layoutParams.rightMargin = -250; 6 layoutParams.bottomMargin = -250; 7 view.setLayoutParams(layoutParams); 8 break;

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

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

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

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

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

guest

回答2

0

その記事の情報はだいぶ古いので、今だったら setTranslationX / setTranslationY でImageViewを移動した方がよいと思います。

再レイアウトをしないぶん動作も軽くなりますし、rightMarginやbottomMarginに負の値を設定するようなテクニックも要りません。

java

1case MotionEvent.ACTION_MOVE: 2 view.setTranslationX(X - _xDelta); 3 view.setTranslationY(Y - _yDelta); 4 break;

投稿2018/09/23 04:43

kakajika

総合スコア3131

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

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

0

ベストアンサー

rightMarginとbottomMarginに0を入れて実行すると、画像をドラッグして画面の右端や下端の方向に移動させたときに、端に追いやるに従って画像がだんだん縮小していくことでしょう。そうならないように、RelativeLayoutの右側と下側のマージンに負値を設定することで、縮小することなく画面外にまで移動させられることができるようにしているのだと思います。

投稿2018/09/22 05:49

keicha_hrs

総合スコア6768

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

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

maru2213

2018/09/22 08:51

なるほど、ありがとうございます。 なぜ負値を指定すると縮小されないのでしょうか…?(なぜ0だと縮小されるのでしょう?) 回答していただけるとありがたいです。
keicha_hrs

2018/09/22 15:28 編集

指定した範囲内に画像が収まらないときに、画像が縮小描画されるのはOSによる処理です。例えば親レイアウトの横幅が1000あるところに、横幅150の画像を描画しようとします。このとき、画像を配置する左側のマージンを900と指定したら、そのままだと右側は50だけ親レイアウトからはみ出してしまいます。このままだと、画像の横幅は100に縮小されて描画されます。しかし、右側マージンとして-50以上の負の値を指定すれば、50だけはみ出すのが許されるので、縮小されることはありません。下方向も要領は同じです。このプログラムでは-250としていますが、画像のサイズが150ですからそれで十分という決め打ちだと思われます。左と上のマージンについては、プログラム中の計算によって負の値が求まっているはずです。
maru2213

2018/09/23 01:14

ありがとうございました! わかりやすい説明で助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問