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

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

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

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

Java

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

Android Studio

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

Q&A

解決済

1回答

2832閲覧

2048のようなゲームアプリを作りたい

DAEichan

総合スコア29

XML

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

Java

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

Android Studio

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

0グッド

0クリップ

投稿2016/09/27 01:40

編集2016/09/27 02:24

###2048のアプリのように4×4の格子状のマスにランダムで数字タイルを生成させたい
AndroidStudioで2048のようなゲームを勉強がてらに作っているのですがマス目の中にどうやってタイルを生成させたらいいか方法が思いつかず質問させていただきました。
###試したこと
GridLayoutでテキストを並べてみたけどなんか微調整がうまくいかず。。。
(Java勉強のためJavaの方でタイルを並べたい)

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

package

1 2 3import android.support.v7.app.AppCompatActivity; 4import android.os.Bundle; 5import android.view.View; 6import android.view.GestureDetector; 7import android.view.MotionEvent; 8import android.graphics.Canvas; 9import android.graphics.Color; 10import android.content.Context; 11import android.util.Log; 12import android.widget.TextView; 13import android.graphics.Paint; 14import java.util.Random; 15 16 17public class NaitiveActivity extends AppCompatActivity implements GestureDetector.OnGestureListener { 18 19 GestureDetector gestureDetector; 20 TextView tv; 21 private final int THRESHOLD = 40; 22 23 24 private static final int StrokeWidth1 = 20; 25 private static final int StrokeWidth2 = 30; 26 //Canvas中心点 27 private float xc = 0.0f; 28 private float yc = 0.0f; 29 30 @Override 31 protected void onCreate(Bundle savedInstanceState) { 32 super.onCreate(savedInstanceState); 33 setContentView(R.layout.activity_naitive); 34 //インスタンスの生成 35 DrawView view = new DrawView(this); 36 setContentView(view); 37 gestureDetector = new GestureDetector(this, this); 38 39 } 40 41 class DrawView extends View { 42 Paint paint; 43 Random randInit1 = new Random(); 44 //Random randInit2 = new Random(); 45 public DrawView(Context context){ 46 super(context); 47 paint = new Paint(); 48 } 49 50 @Override 51 protected void onDraw(Canvas canvas){ 52 53 // Canvas 中心点 54 //xc = canvas.getWidth()/2; 55 //yc = canvas.getHeight()/2; 56 //初期2パネル生成用ランダム変数(まだ同じ数字が出る) 57 for(int i = 0;i < 1; i++) { 58 int initRand1 = randInit1.nextInt(15); 59 Log.d("randInit1", "RANDOM:" + initRand1); 60 switch(2) { 61 case 1: 62 // 数字パネル 63 paint.setColor(Color.RED); 64 canvas.drawText("書きたい文字", 500, 400, paint); 65 66 case 2: 67 // 数字パネル 68 paint.setColor(Color.RED); 69 paint.setAntiAlias(true); 70 canvas.drawRect(160, 300, 100, 400, paint); 71 canvas.drawText("2", 50, 60, paint); 72 73 case 3: 74 // 数字パネル 75 paint.setColor(Color.RED); 76 paint.setAntiAlias(true); 77 canvas.drawRect(240, 300, 100, 400, paint); 78 79 } 80 } 81 82 83 // 数字パネル 84 paint.setColor(Color.RED); 85 paint.setStyle(Paint.Style.STROKE); 86 paint.setStrokeWidth(StrokeWidth2); 87 paint.setAntiAlias(true); 88 canvas.drawRect(80, 300, 1000, 1280, paint); 89 90 // 内側塗り 91 paint.setColor(Color.argb(255, 192, 192, 192)); 92 paint.setStyle(Paint.Style.FILL_AND_STROKE); 93 paint.setStrokeWidth(StrokeWidth2); 94 paint.setAntiAlias(true); 95 // (x1,y1,x2,y2,paint) 左上の座標(x1,y1), 右下の座標(x2,y2) 96 canvas.drawRect(80, 300, 1000, 1280, paint); 97 98 // 枠 99 paint.setColor(Color.GRAY); 100 paint.setStyle(Paint.Style.STROKE); 101 paint.setStrokeWidth(StrokeWidth2); 102 paint.setAntiAlias(true); 103 canvas.drawRect(80, 300, 1000, 1280, paint); 104 105 // 縦線(縦ドセン) 106 paint.setStrokeWidth(StrokeWidth1); 107 paint.setColor(Color.GRAY); 108 // (x1,y1,x2,y2,paint) 始点の座標(x1,y1), 終点の座標(x2,y2) 109 canvas.drawLine(545, 300, 545, 1280, paint); 110 111 // 縦線(右) 112 paint.setStrokeWidth(StrokeWidth1); 113 paint.setColor(Color.GRAY); 114 // (x1,y1,x2,y2,paint) 始点の座標(x1,y1), 終点の座標(x2,y2) 115 canvas.drawLine(780, 300, 780, 1280, paint); 116 117 // 縦線(左) 118 paint.setStrokeWidth(StrokeWidth1); 119 paint.setColor(Color.GRAY); 120 // (x1,y1,x2,y2,paint) 始点の座標(x1,y1), 終点の座標(x2,y2) 121 canvas.drawLine(320, 300, 320, 1280, paint); 122 123 // 線(横真ん中) 124 paint.setStrokeWidth(StrokeWidth1); 125 paint.setColor(Color.GRAY); 126 // (x1,y1,x2,y2,paint) 始点の座標(x1,y1), 終点の座標(x2,y2) 127 canvas.drawLine(80, 800, 1000, 800, paint); 128 129 // 線(横上部) 130 paint.setStrokeWidth(StrokeWidth1); 131 paint.setColor(Color.GRAY); 132 // (x1,y1,x2,y2,paint) 始点の座標(x1,y1), 終点の座標(x2,y2) 133 canvas.drawLine(80, 551, 1000, 551, paint); 134 135 // 線(横下部) 136 paint.setStrokeWidth(StrokeWidth1); 137 paint.setColor(Color.GRAY); 138 // (x1,y1,x2,y2,paint) 始点の座標(x1,y1), 終点の座標(x2,y2) 139 canvas.drawLine(80, 1035, 1000, 1035, paint); 140 141 } 142 } 143 public boolean onTouchEvent(MotionEvent event) { 144 gestureDetector.onTouchEvent(event); 145 return true; 146 } 147 148 @Override 149 public boolean onDown(MotionEvent e) { 150 // TODO 自動生成されたメソッド・スタブ 151 return false; 152 } 153 154 @Override 155 public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 156 Log.d("onFling", "start"); 157 158 if (e2.getX() - e1.getX() > THRESHOLD) { 159 Log.d("onFling", "右"); 160 } else if (e2.getX() - e1.getX() < -THRESHOLD) { 161 Log.d("onFling", "左"); 162 } else if (e2.getY() - e1.getY() > THRESHOLD) { 163 Log.d("onFling", "下"); 164 } else if (e2.getY() - e1.getY() < -THRESHOLD) { 165 Log.d("onFling", "上"); 166 } 167 168 return false; 169 } 170 171 172 @Override 173 public void onLongPress(MotionEvent e) { 174 // TODO 自動生成されたメソッド・スタブ 175 176 } 177 178 @Override 179 public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 180 // TODO 自動生成されたメソッド・スタブ 181 return false; 182 } 183 184 185 @Override 186 public void onShowPress(MotionEvent e) { 187 // TODO 自動生成されたメソッド・スタブ 188 189 } 190 191 @Override 192 public boolean onSingleTapUp(MotionEvent e) { 193 // TODO 自動生成されたメソッド・スタブ 194 return false; 195 } 196 197} 198

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

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

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

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

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

yona

2016/09/27 01:49

うまくいかないコードを載せてください。 また、何がうまくいかないのかを具体的に書いてください。
yona

2016/09/27 02:19

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

回答1

0

ベストアンサー

setContentViewは画面にViewを追加するメソッドではありません。
指定したレイアウトファイルまたはViewをActivityのルートViewにするメソッドです。
あなたのコードではレイアウトファイルをsetContentViewした後にDrawViewをsetContentViewして上書きしています。

投稿2016/09/27 02:21

yona

総合スコア18155

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

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

DAEichan

2016/09/27 02:29

//インスタンスの生成 DrawView view = new DrawView(this); setContentView(view); ←ここが入らないということでしょうか。。。 gestureDetector = new GestureDetector(this, this);
DAEichan

2016/09/27 02:30

訂正 //インスタンスの生成 DrawView view = new DrawView(this); setContentView(view); ←ここがいらないということでしょうか。。。 gestureDetector = new GestureDetector(this, this);
yona

2016/09/27 02:45

いらないかどうかは私が決めることではないですね。 レイアウトファイルにGridLayoutがあり、このGridLayoutにDrawViewを追加したいのならいらないです。 GridLayout#addViewでDrawViewを追加しましょう。
DAEichan

2016/09/27 04:18

わかりました。 とりあえずやってみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問