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

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

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

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

Q&A

解決済

3回答

4420閲覧

OnTouchでの座標の取得

sjyrnt7710

総合スコア13

Android Studio

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

0グッド

0クリップ

投稿2017/05/20 10:52

編集2017/05/20 11:22

###前提・実現したいこと
OnTouchでの座標の取得

###発生している問題・エラーメッセージ

下記のプログラムをjavaに直接レイアウトを書かずに実現したいです。
どうすればいいでしょうか

###該当のソースコード
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.widget.LinearLayout;

public class MainActivity extends Activity implements OnTouchListener {

float x1=0; float y1=0; float x2=0; float y2=0; float x3=0; float y3=0; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // タイトルは無しで。 this.requestWindowFeature(Window.FEATURE_NO_TITLE); // レイアウトを作って設定 LinearLayout layout = new LinearLayout(this); this.setContentView(layout); // テキストボックス表示する // GLSurfaceViewを作る final SurfaceView surfaceView = new SurfaceView(this); surfaceView.setLayoutParams(new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); surfaceView.setOnTouchListener(this); surfaceView.setBackgroundColor(Color.CYAN); layout.addView(surfaceView); } //////////////////////////////////////////////////////////// // タッチされたイベントが全部こっちにくる public boolean onTouch(View v, MotionEvent event) { switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: Log.d("TouchEvent", "X:" + event.getX() + ",Y:" + event.getY()); x1=event.getX(); y1=event.getY(); break; case MotionEvent.ACTION_UP: Log.d("TouchEvent", "X:" + event.getX() + ",Y:" + event.getY()); x2=event.getX(); y2=event.getY(); break; } if(x1>x2){ x3=x1-x2; }else{ x3=x2-x1; } if(y1>y2){ y3=y1-y2; }else{ y3=y2-y1; } Log.d("TouchEvent", "X:" +x3); Log.d("TouchEvent", "Y:" +y3); return true; }

}
###試したこと

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

guest

回答3

0

ベストアンサー

Serviceでバックグラウンドに入れWindowManagerを使って透明なViewをのせ、そのViewにsetOnTouchListenerをセットすれば可能だと思います。

投稿2017/05/22 09:51

aja

総合スコア3733

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

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

sadman

2017/05/22 09:58

ご回答ありがとうございます。 透明なview自体は作れるのですが、そのViewにsetOnTouchListenerをセットという作業の方法が分かりません。 具体的に説明しているサイトなどはありますでしょうか?
aja

2017/05/22 12:02

https://akira-watson.com/android/windowmanager.html この例ではバックグラウンドでに入っても画像が表示されタップで終了するようになっています 座標はこの例のようにすれば取り出せるでしょう https://akira-watson.com/android/touchevent.html 問題が1つあって、このタップを認識する画像の下にあるアプリのタップは取れないかもしれません スクリーン全面を透明画像にするとアプリのゲームができないということです これを解決できるか不明です(多分とても難しい)
sadman

2017/05/22 13:01

やはりそうですか… それが出来るとキーロガーのようなものが簡単に出来てしまうという意見を他の場所で聞いて、実現は不可能ではと考えていました… ご回答ありがとうございました。
guest

0

LinearLayout.LayoutParams.WRAP_CONTENTをLinearLayout.LayoutParams.MATCH_PARENTに変更してみては?
現状、viewの高さが0dpになっていてタッチイベントが発火していない気がします?

投稿2017/05/20 14:20

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

Viewを1つも使わないということですね?
それならActivity#onTouchEventをオーバーライドするといいですよ。

また、コードはコード用の記述に修正してください。

投稿2017/05/20 11:34

yona

総合スコア18155

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

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

sjyrnt7710

2017/05/20 11:37

ご回答ありがとうございます。 可能ならばonTouchEventを使わずにonTouchで実現したいのです。 onTouchで実現は無理ですかね…?
yona

2017/05/20 11:46

なぜonTouchにこだわるのかわからない以上回答はできません。なにを考えてそのような要望があるのかを説明してください。 また、onTouchはViewのタッチイベントを取得する目的のためにあります、それ以外で使うにはそれなりの労力が入りますよ。
sjyrnt7710

2017/05/20 11:51

serviceでアプリを開いていなくても常に座標を検出しようとしています。 大学の研究で必要なのですが、前任の方がonTouchで一定時間内に一定回数以上のタップがあるとSubActivityを起動というプログラムを作っておられました。 私はそれをスワイプに変えたいのですが、OnTouchEventを使用するとエラーが出るので、何とかOnTouchで座標を検出する方法は無いかと思い質問させていただきました。
yona

2017/05/20 12:03

「javaに直接レイアウトを書かずに実現したいです」は「Viewを1つも使わない」という意味ですよね? それなら現アプリではViewを使っていないということですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問