Java,Android タップした画像を移動させる

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
coco

Java,Android タップした画像を移動させる

#1

投稿記事 by coco » 11年前

JavaとEclipseによるAndroidアプリ制作を行っております。

タップした画像(ImageView)の移動に関して、現在

コード:

     public class test extends Activity implements OnClickListener{
          private ImageView hogeImg;

          protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_test);
                hogeImg = (ImageView)findViewById(path);

               //C言語の様に扱いたかったため、ここでループさせています
               UpdataTest = new Runnable() {
			public void run(){
                               mHandler.removeCallbacks(UpdataTest);
	                       mHandler.postDelayed(UpdataTest, 33);
			}
	    };
	    mHandler.postDelayed(UpdataTest, 33);
	}

        public boolean onTouchEvent(MotionEvent event) {
		if(event.getAction() == MotionEvent.ACTION_UP){
			int tx = (int)event.getRawX();
			int ty = (int)event.getRawY();
				
			int vx = hogeImg.getLeft();
			int vy = hogeImg.getTop();
			int vw = hogeImg.getWidth();
			int vh = hogeImg.getHeight();
			if( (vx < tx) && ((vx + vw) > tx) && ((vy+vh) < ty) && ((vy + vh*2) > ty) ){
			    	hogeImg.layout(vx, vy - vh/2, vx + vw, vy + vh/2);
			    	Log.d("tuuka","tuuka");
			 }
		}
           }
    }

この様なソースですが(今例をこちらで組んだため、インデントずれご容赦下さい)、画像をタップすると一瞬動いた後元に戻ってしまいます。
当初onTouch内でImageViewの生成を行っていたために座標の初期化が行われると思い、生成を外に出しましたが影響はありませんでした。
無理にループさせている事が原因なのか、あるいはグラフィカルレイアウトが何かしら影響を与えているのか皆目検討がつかず質問させて頂きました。
JavaもAndroid開発も初めてのため、一般的なソースの書き方が分からない点ご容赦下さい。
(毎フレーム呼び出される関数が無かったり、毎フレーム描画をしなかったり、かなり戸惑いの連続でした。)

hide

Re: Java,Android タップした画像を移動させる

#2

投稿記事 by hide » 11年前

OnClickListenerをimplementsしながらonTouchEventで処理していたり 謎ソースになってる感がしなくもないです。
例ではなく、実際のうまくいかないものがほしいですね。
JavaもAndroid開発も初めてとのことですが、implementsなどの言語自体に関する知識などは大丈夫ですか?

それと、imageViewの生成の話がありながら、ソース内に見当たらないのは
setContentViewで一括でやることに変更なさったのでしょうか?
それともfindViewByIdを生成と勘違いしている・・・ということはないですよね?

coco

Re: Java,Android タップした画像を移動させる

#3

投稿記事 by coco » 11年前

>>hideさん
ソース自体はあるのですが、これを公開しても恐らく役に立たないかと・・・。

ボタンもあるためonClickをimplementしておりました。
一度onTouchListenerもimplementし、該当のImageViewをリスナー設定して試しましたがこちらも駄目でした。
言語自体に関する知識も乏しいですが、一応全て調べながら実装してきました。
C++,C,JavaScript,PHPについての知識はあるので、もし宜しければそちらで例えて下さると助かります。

すみません、動的に生成している訳ではなく既にグラフィックレイアウトに配置済みの物をIDから取得しております。
ひょっとしたらグラフィックレイアウト側のxmlで画像の座標が移動したら他の画像との位置関係から勝手に修正されてしまうのかな?とも考えましたが分かりません。

アバター
へにっくす
記事: 634
登録日時: 13年前
住所: 東京都

Re: Java,Android タップした画像を移動させる

#4

投稿記事 by へにっくす » 11年前

coco さんが書きました:>>hideさん
ソース自体はあるのですが、これを公開しても恐らく役に立たないかと・・・。
こちらでも動作を確認するのに、ソースがあった方が手っ取り早い。
何で役にたたないなんて言いきれるんですか?(分からないから聞いてるんですよね?)
今動いているプロジェクトを見てもらった方が、話が早いですよ。
coco さんが書きました:C++,C,JavaScript,PHPについての知識はあるので、もし宜しければそちらで例えて下さると助かります。
Android開発してるんですよね?
なぜほかの言語が出てくるんですか?

まあとりあえず参考になりそうなページ。
onTouchによる画像の移動
written by へにっくす

coco

Re: Java,Android タップした画像を移動させる

#5

投稿記事 by coco » 11年前

>>へにっくすさん
1年ほど?前からずっと疑問だったのですが、なぜへにっくすさんは多くの質問される方に対して喧嘩腰なのでしょうか?
既にへにっくすさんに対しては他の質問者さんが色々おっしゃって頂いて、またこうして掘り返す様な事をするものじゃないかもしれませんが、批判というよりは率直に疑問に思いました。

動作を確認するためのソースとリソースがかなり多くあり、リソースに関しては公開出来ません。
該当部分のソースだけでは動作の確認は取れません。
そのためこの問題の部分のソースを公開する事はどうなんだろうと思いました。
もしそれでも見て頂けるのであればなるべく余分な部分を削って公開しようかと思います。

他の言語に例える事に関しては例えばCでもfor文などのJavaと共通した構文はあるかと思います。
もしJavaでも(if,forなど基礎的な部分は共通していて助かりますが)自分の知らない単語や構文などで、他の言語に例えられる例が仮にあれば理解が捗って助かるなと思い書かせて頂きました。


そちらのページは既に参考致しました。
恐らくその方がしてらっしゃらないループ化などが原因かなと考えておりました。

アバター
へにっくす
記事: 634
登録日時: 13年前
住所: 東京都

Re: Java,Android タップした画像を移動させる

#6

投稿記事 by へにっくす » 11年前

coco さんが書きました:>>へにっくすさん
1年ほど?前からずっと疑問だったのですが、なぜへにっくすさんは多くの質問される方に対して喧嘩腰なのでしょうか?
既にへにっくすさんに対しては他の質問者さんが色々おっしゃって頂いて、またこうして掘り返す様な事をするものじゃないかもしれませんが、批判というよりは率直に疑問に思いました。
喧嘩腰のつもりはないですよ。
回答するには情報が足りないと思う質問に対して、常に私は思っていることをそのまま投稿しているだけです。
coco さんが書きました:動作を確認するためのソースとリソースがかなり多くあり、リソースに関しては公開出来ません。
該当部分のソースだけでは動作の確認は取れません。
そのためこの問題の部分のソースを公開する事はどうなんだろうと思いました。
もしそれでも見て頂けるのであればなるべく余分な部分を削って公開しようかと思います。
どんなソースだろうが、見る人は見ると思いますよ。
今のままだと、先ほども言ったように情報が足りないです。
回答者が想像を働かせて答えることになるので、時間がかかるだろうなあと思うから言うのです。

#該当のソースだけでは再現できないですか・・・
#リソースが多いなら、動作するまで減らしてみて、
#動作するのを確認したら、そのリソースの数(メモリ?)以上にならないように
#使い回しさせるとか、ですかね・・・
written by へにっくす

hide

Re: Java,Android タップした画像を移動させる

#7

投稿記事 by hide » 11年前

再現できるソースが出てこないと、正解を導くのは割と難しいことを言っておきますね。


ボタンが他にある件理解しました。 ただ、クリックやらタッチやらあまり重ねると面倒なので、気をつけてください。
一瞬なりとも画像の移動ができているみたいなので関係なさそうな感じですね。

動的に生成しているわけでない点もOKです。
おそらく、setContentViewでだけxmlを利用してそうなので問題なさそうですね。
Javascriptでhtmlを操作している感覚でいてもらっておそらく大丈夫です。

やはりループを作って動かしてるのが怪しくはありますね。
ゲーム以外のGUIのプログラミングではあまりそういう書き方をしないです。イベントに合わせて書いていくべきです。
逆にゲーム系なのであれば、View継承してCanvasを直接動かしたりするほうがgoodです。

こちらで再現不能だとこれくらいし言えることが無いですね。

coco

Re: Java,Android タップした画像を移動させる

#8

投稿記事 by coco » 11年前

一度確実に動作確認が取れるソースに出来るかどうか試してみます。


またお手を煩わせる前に出来る限り自分で試そうと思いますので、少し件名と違った質問になりますがご了承下さい。

この原因となっていそうなメインループを組み立てた経緯についてで御座いますが、ゲームプログラムなどでよく用いられる
static int waitCount; など静的な変数を用いたカウント制御(200カウントになるまで処理をしない等)を実装したく探した所、このメインループに行き当たりました。

Java,Androidではこうしたカウント制御はどの様にして実装するのが一般的でしょうか?
例えば一定時間毎に画像を動かしたり、200カウントになるまではonTouchイベントを呼び出さない様にする等。

一応正しいカウント制御の仕方で一度メインループを崩してみようかと思っております。
その結果としてまだバグが直らない様でしたら、少なくとも今のメインループ有りの物より読み易いソースになると思いますので、そちらを公開しようと考えております。

coco

Re: Java,Android タップした画像を移動させる

#9

投稿記事 by coco » 11年前

解決致しました。
やはりループが原因だったらしく、ループを崩して試した所うまく行きました。
カウント制御については未解決ですが、これは自力で頑張ろうと思います。
有難う御座いました。

閉鎖

“C言語何でも質問掲示板” へ戻る