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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

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

Android Studio

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

Q&A

解決済

2回答

2718閲覧

Android アプリ 開発 SurfaceView タッチイベント

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

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

Android Studio

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

0グッド

0クリップ

投稿2017/03/22 13:43

###前提・実現したいこと
surfaceviewで行っている処理を止めずに、surfaceviewをセットしているActivityでタッチイベントを取得してsurfaceviewの処理へタッチイベントで取得した座標を渡したい。

###発生している問題・エラーメッセージ
Activityでタッチイベントを取得するとsurfaceviewで行っていた処理が止まってしまう。

###該当のソースコード

public class MainActivity extends Activity{ private SurfaceView surfaceView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); surfaceView = (SurfaceView)findViewById(R.id.SurfaceViewMain); mainView = new MainView(this,surfaceView); } @Override public boolean onTouchEvent(MotionEvent event){ if(event.getAction() == MotionEvent.ACTION_UP) { float x = event.getX(); if (MainView.lx > x) { MainView.lx--; } else if (MainView.lx < x) { MainView.lx++; } } return true; } } public class MainView extends SurfaceView implements surfaceHolder.Callback,Runnable{ static int lx =0 ; private boolean isAttached = true; private int speed = 5; private long t1 = 0,t2 = 0 ; public MainView(Context context, SurfaceView sv) { holder = sv.getHolder(); holder.addCallback(this); holder.setFixedSize(getWidth(), getHeight()); } @Override public void surfaceCreated(SurfaceHolder holder){ this.holder = holder; thread = new Thread(this); thread.start(); } @Override public void surfaceDestroyed(SurfaceHolder holder){ isAttached = false; thread = null; } @Override public void run(){ while(isAttached ) { draw(); } } public void draw() { Canvas canvas = holder.lockCanvas(); ly+=speed; canvas.drawColor(0xFF494949); Paint paint = new Paint(); paint.setColor(Color.RED); canvas.drawRect(0, ly, 300, 300, paint); holder.unlockCanvasAndPost(canvas); // スリープ t2 = System.currentTimeMillis(); if(t2 - t1 < 16){ try { Thread.sleep(16 - (t2 - t1)); } catch (InterruptedException e) { } } } }

###補足情報(言語/FW/ツール等のバージョンなど)
java/android studio2.3

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

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

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

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

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

guest

回答2

0

ベストアンサー

draw()の前後に適当なログ出力処理を追加して、本当に止まっているかを確認してください。

投稿2017/03/22 16:04

yona

総合スコア18155

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

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

退会済みユーザー

退会済みユーザー

2017/03/23 00:01

Log出力して見ましたが、やはりタッチイベントを取得した時点でSurfaceview側のrun()は停止していました。
yona

2017/03/23 00:26

runの中で例外が発生している可能性があります。 各所にログ出力処理を追加して確認してください。
退会済みユーザー

退会済みユーザー

2017/03/23 00:55

x座標をインクリメントしていたのですが、x座標を配列から呼び出しているのでインデックスをインクリメントしたら動作しました。
guest

0

記載のコードが所々おかしい(MainViewがlyでActivityがlx等)のもありますがそこは置いておきます。
止まっているかのログの確認に合わせて、canvas.drawRectの仕様も確認した方がいいと思います。
これだと描画の場所がいずれ画面外になり何も描画しなくなるので止まった風に見えている気がします。

投稿2017/03/22 16:30

uniko

総合スコア448

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

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

退会済みユーザー

退会済みユーザー

2017/03/23 00:00

すみません、実際のプロジェクトは余分な部分が多いため重要な部分だけ抜き出してコードをのせたため画面外に行かないようにする処理が抜けていました。 実際のコードは例外処理をしているため画面外へ行くことはありません。
uniko

2017/03/23 00:11

そうですか。であればまずLogを差しこんで状況を見る事を勧めます。
退会済みユーザー

退会済みユーザー

2017/03/23 00:56

無事解決できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問