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

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

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

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

Android Studio

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

Q&A

0回答

1004閲覧

androidのSurfaceViewでのonTouchEventが呼ばれない

Bach0510

総合スコア0

Java

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

Android Studio

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

0グッド

0クリップ

投稿2020/08/15 09:36

androidstudioでandroidアプリを開発しており、xmlファイルで作成したsurfaceView上でのタッチを認識させたいのですがうまくいきません。ログを見てもタッチが反応されていない状態でした。onTouchEventをdispatchTouchEventに変えてみてもダメでした。どなたかわかる方いらっしゃいますか?

言語 JAVA

コード
package com.example.pbl_app;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.media.PlaybackParams;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import java.io.IOException;

public class SubActivity extends MainActivity {
boolean play = false;
int cx = 515, cy = 485;
private SurfaceView surfaceView;
private MySurfaceView mySurfaceView;
PlaybackParams params = new PlaybackParams();
public long moveX,moveY=0;

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.next_activity); surfaceView = (SurfaceView) findViewById(R.id.surfaceViewSub); mySurfaceView = new MySurfaceView(this,surfaceView); final Button PButton = findViewById(R.id.PlayButton); final Button EButton = findViewById(R.id.ExitButton); PButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { EditVoice(); if (play) { stopPlaying(); play = true; } else { startPlaying(); play = false; } } }); } private void startPlaying() { try { player.setDataSource(fileName); player.setPlaybackParams(params); player.prepare(); player.start(); } catch (IOException e) { player.release(); player = null; } } private void stopPlaying() { player.release(); player = null; } public void EditVoice() { params.setPitch(3.f); params.setSpeed(2.f); } public class MySurfaceView extends SurfaceView //SurfaceViewを描画するクラス implements Runnable, SurfaceHolder.Callback { Canvas canvas = null; private float width,height; public Paint mPaint = new Paint(); public Paint ballPaint = new Paint(); static final int BALL_R = 20;//ボールの大きさ Bitmap bmp = BitmapFactory.decodeResource(getResources(),R.drawable.picture1); SurfaceHolder holder; Thread thread; StringBuilder msg = new StringBuilder(); public MySurfaceView(Context context, SurfaceView surfaceView) { super(context);//コンストラクタ。SurfaceView描画に用いるコールバックを登録する。 holder = surfaceView.getHolder(); holder.addCallback(this); } @Override public void run() { ballPaint.setStyle(Paint.Style.FILL); ballPaint.setColor(Color.RED); while (thread != null) { doDraw(holder); } } @Override public void surfaceCreated(SurfaceHolder holder) { thread = new Thread(this); thread.start(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { thread = null; } private void doDraw(SurfaceHolder holder) { if (thread != null) { canvas = holder.lockCanvas(); if(moveX < 0 || moveX < this.width ) { cx += moveX; } if(moveY < 0 || moveY < this.height ) { cy += moveY; } canvas.drawBitmap(bmp, 0, 0, mPaint); canvas.drawCircle(cx,cy,BALL_R,ballPaint); holder.unlockCanvasAndPost(canvas); } } @Override public boolean onTouchEvent(MotionEvent event){ switch(event.getAction()){ case MotionEvent.ACTION_DOWN: msg.append(event.getX()); mPaint.setColor(Color.BLACK); canvas.drawCircle(cx,100,BALL_R,mPaint); Log.v("DOWN,X\n",msg.toString()); break; case MotionEvent.ACTION_MOVE: moveX += event.getX(); moveY += event.getY(); msg.append(event.getY()); Log.v("Y",msg.toString()); break; default: break; } return true; } }

}

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問