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

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

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

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

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

Android Studio

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

Q&A

解決済

1回答

3273閲覧

android studio ボタンでキャラクターを操作したいです

entd270

総合スコア19

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

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

Android Studio

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

0グッド

0クリップ

投稿2019/04/28 01:55

編集2019/04/28 02:22

前提・実現したいこと

矢印ボタンを押すことで、キャラクター画像を移動させるプログラムを作成しています。

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

私のイメージとしては、onClickメソッドの中にonDrawメソッドを入れることで、クリックされたらonDrawを呼び出して、キャラクター画像を移動させたいです。しかし、どうやっても、onClickとonDrawの両立ができません。

該当のソースコード

xml

1//activity_main.xml 2 3//ボタンをの設定  4<RelativeLayout 5 xmlns:android="http://schemas.android.com/apk/res/android" 6 xmlns:app="http://schemas.android.com/apk/res-auto" 7 xmlns:tools="http://schemas.android.com/tools" 8 android:layout_width="match_parent" 9 android:layout_height="match_parent" 10 tools:context=".MainActivity"> 11 12 <ImageButton 13 android:id="@+id/imageButtonLeft" 14 android:layout_width="wrap_content" 15 android:layout_height="wrap_content" 16 android:layout_alignParentLeft="true" 17 android:layout_alignParentBottom="true" 18 android:layout_marginLeft="12dp" 19 app:srcCompat="@drawable/left" /> 20 21 <ImageButton 22 android:id="@+id/imageButtonRight" 23 android:layout_width="wrap_content" 24 android:layout_height="wrap_content" 25 app:srcCompat="@drawable/right" 26 android:layout_alignParentBottom="true" 27 android:layout_centerVertical="true" 28 android:layout_marginLeft="15dp" 29 android:layout_toRightOf="@+id/imageButtonLeft"/> 30 31 <ImageButton 32 android:id="@+id/imageButtonTop" 33 android:layout_width="wrap_content" 34 android:layout_height="wrap_content" 35 app:srcCompat="@drawable/top" 36 android:layout_alignParentRight="true" 37 android:layout_alignParentBottom="true" 38 android:layout_marginRight="15dp"/> 39 40</RelativeLayout>

java

1//MainActivity.java 2 3import android.support.v7.app.AppCompatActivity; 4import android.os.Bundle; 5import android.view.View; 6import android.view.ViewGroup; 7import android.widget.LinearLayout; 8 9public class MainActivity extends AppCompatActivity implements View.OnClickListener{ 10 11 private GameView gameView; 12 private Droid droid; 13 14 @Override 15 protected void onCreate(Bundle savedInstanceState) { 16 super.onCreate(savedInstanceState); 17 18 gameView = new GameView(this); 19 setContentView(gameView);//画面にgameViewを配置 20 View view = this.getLayoutInflater().inflate(R.layout.activity_main, null); 21 22 addContentView(view, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 23 ViewGroup.LayoutParams.FILL_PARENT));//activity_mainのviewを重ねて配置 24 25 findViewById(R.id.imageButtonLeft).setOnClickListener(this); 26 27 } 28 29 public void onClick(View view){ 30 //ここを色々変更していました。 31 } 32}

java

1//GameView.java 2//ゲーム画面の設定 3 4package com.example.test; 5 6import android.content.Context; 7import android.graphics.Bitmap; 8import android.graphics.BitmapFactory; 9import android.graphics.Canvas; 10 11import android.view.View; 12 13public class GameView extends View { 14 15 private Bitmap droidBitmap; 16 private Droid droid; 17 18 public GameView(Context context){ 19 super(context); 20 21 droidBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.droid100);// キャラクター画像を設定 22 droid = new Droid(droidBitmap,0,0);//キャラクターの初期位置 23 24 } 25/////////ここも色々変更していました//////////// 26 @Override 27 protected void onDraw(Canvas canvas){//キャラクターを描画 28 super.onDraw(canvas); 29 droid.move(); 30 droid.draw(canvas); 31 invalidate(); 32 } 33//////////////////////////////////////// 34 35}

java

1//Droid.java 2//キャラクターの設定 3 4package com.example.test; 5 6import android.graphics.Bitmap; 7import android.graphics.Canvas; 8import android.graphics.Paint; 9import android.graphics.Rect; 10 11public class Droid { 12 private final Paint paint = new Paint(); 13 14 private Bitmap bitmap; 15 16 final Rect rect; 17 18 public Droid(Bitmap bitmap, int left, int top) { 19 int right = left + bitmap.getWidth(); 20 int bottom = top + bitmap.getHeight(); 21 this.rect = new Rect(left, top, right, bottom); 22 this.bitmap = bitmap; 23 } 24 25 public void draw(Canvas canvas) { 26 canvas.drawBitmap(bitmap, rect.left, rect.top, paint); 27 } 28 29 public void move(){ //キャラクターを右に1ずつ動かす 30 rect.offset(1,0); 31 } 32 33}

試したこと

onClickメソッドの中に、onDrawメソッドを入れて見たり、onClickメソッドとonDrowメソッドを色々変えて見たのですがダメでした。。。そもそもの考え方が違う気もするので、アドバイスをいただきたいです。

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

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

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

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

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

nskydiving

2019/04/28 02:12

コードは<code>タグで囲んで提示するようにお願いします。
entd270

2019/04/28 02:23

失礼致しました。。。
guest

回答1

0

ベストアンサー

invalidate メソッドを呼び出すと、イベントによって onDraw メソッドが呼び出されます。

GameView.onDraw メソッドの中ではなく、GameView.onClick メソッドの中で invalidate メソッドを呼び出すと良いと思います。

投稿2019/04/28 03:27

nskydiving

総合スコア6500

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

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

entd270

2019/04/28 14:54

指摘していただいた所を直したら、解決できました! ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問