Androidアプリ開発初心者です。

色々なサイトを参考にさせて頂き、センサの値を表示するアプリを作ってみたのですが、
画面をスクロールさせるためScrollViewを追加したところ、タッチイベントが一回目しか取得できなくなってしまいました。
他のセンサは値が更新されるのに、タッチイベントだけは何度触っても一回目の値から更新されないのです。ScrollViewを外すと元に戻ります。
バージョンは2.1です。
原因が分からず困っています。
原因・解決策など分かりましたら、回答願います。
また、ソースを見て直した方がよい箇所などの指摘があればご教授願います。
宜しくお願いします。

ソースコードが載せられなかったので、下記のURLに記載しておきます。
[http://d.hatena.ne.jp/Ji-hoo/20110219]

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2011/02/19 23:54:04
  • 終了:2011/02/26 23:55:02

回答(1件)

id:i_kumagoro No.1

i_kumagoro回答回数170ベストアンサー獲得回数582011/02/22 16:33:18

ポイント60pt

onTouchEventのドキュメントに書かれていますが、

Called when a touch screen event was not handled by any of the views under it.

との事なので、ScrollViewでイベントが処理されるとActivityのonTouchEventメソッドは呼ばれません。

多分onInterceptTouchEventメソッドをoverrideしたScrollViewのサブクラスを作る必要があると思います。

例えば、

class localScrollView extends android.widget.ScrollView {
	public localScrollView(Context context) {
		super(context);
	}

	@Override
	public boolean onInterceptTouchEvent(MotionEvent ev) {
		((Activity)(this.getContext())).onTouchEvent(ev);
		return super.onInterceptTouchEvent(ev);
	}
}

のようにしたScrollViewのサブクラスを、

Activityから以下のように使用すればいけそうな気がします。

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		ViewGroup scv = new localScrollView(this);
		android.view.LayoutInflater li = (android.view.LayoutInflater)
		getSystemService(LAYOUT_INFLATER_SERVICE);
		setContentView(li.inflate(R.layout.main, scv, true));
	}

ただし、これだとActivityの onTouchEventメソッドにある

return super.onTouchEvent(event);

が本来なら実行されないときにも実行されてしまうので、正しくは、Activityに情報を更新するメソッドを用意して、ActivityのonTouchEventメソッドとlocalScrollViewクラスのonInterceptTouchEventメソッドはそれを呼ぶようにするべきですが。

id:Ji-hoo

回答ありがとうございます。

私の知識不足もあると思うのですが、サブクラスを作ってみても変わりませんでした。

ただ、ドキュメントに記載されているという事は初めて知りました。

それだけでも大きな前進です。

たぶん、ScrollViewを使うような所でonTouchEventを取得しようという考え方自体が非推奨なのかな。

また、何かありましたら宜しくお願いします。

2011/02/23 02:02:20

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

  • Ji-hooの日記 - [Android] 2011-02-20 00:03:54
    [Android] 下記は2月19日に人力検索はてなの質問に投稿したものです。 http://q.hatena.ne.jp/1298127241   Androidアプリ開発初心者です。 色々なサイトを参考にさせて頂き、センサの値を表示する
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません