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

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

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

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

ドラッグ&ドロップ

コンピューターのGUIにおいて、バーチャルなものを「つかむ」ことによって選択し、別の場所や他のバーチャルなものの上に動かす行為、またはその行為に対応していることを指す。

Android Studio

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

Q&A

解決済

1回答

2263閲覧

ドラッグアンドドロップ

yuka3846

総合スコア12

Java

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

ドラッグ&ドロップ

コンピューターのGUIにおいて、バーチャルなものを「つかむ」ことによって選択し、別の場所や他のバーチャルなものの上に動かす行為、またはその行為に対応していることを指す。

Android Studio

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

0グッド

0クリップ

投稿2017/01/17 03:22

編集2017/01/31 02:53

ドラッグアンドドロップすることで数字を入れ替えるシステムを作りたいと考えています。
この状態では指が触れたマス目が色が付き、ランダムでマス目が振動するものです。
これを改良して(おそらくonTouchEventのところでしょうか?)数字が入れ替わる仕組みの作り方を教えていただけますでしょうか。
java初心者なので全然わかりません。アルゴリズム等アドバイスいただけたらと思います。よろしくお願いします。

java

1package com.example.admin.a0116myapplication; 2 3import android.graphics.Color; 4import android.graphics.Point; 5import android.graphics.Rect; 6import android.os.Vibrator; 7import android.support.v7.app.AppCompatActivity; 8import android.os.Bundle; 9import android.util.Log; 10import android.view.Display; 11import android.view.Gravity; 12import android.view.MotionEvent; 13import android.view.View; 14import android.view.WindowManager; 15import android.widget.TableLayout; 16import android.widget.TableRow; 17import android.widget.TextView; 18 19import org.w3c.dom.Text; 20 21import java.util.Random; 22 23public class MainActivity extends AppCompatActivity { 24 25 int COL=4; 26 int ROW=4; 27 int ON_VIB_NUM=4; 28 int viewId[] = new int[COL*ROW+1]; 29 30 /* vibがオンの番号 */ 31 int onVib[] = new int[ON_VIB_NUM]; 32 33 //最後にタッチしたViewの列番号と行番号を保持 34 private int fromRow = -1; 35 private int fromCol = -1; 36 private int fromId = -1; 37 38 //現在タッチしたViewに書いてある番号を保持 39 private int toRow = -1; 40 private int toCol = -1; 41 private int toId = -1; 42 43 MainActivity(){ 44 Random rand = new Random(); 45 for(int i = 0; i<3; i++){ 46 onVib[i] = rand.nextInt(16)+1; 47 48 int x = onVib[i]; 49 for(i = 0; i<16; i++){ 50 if(onVib[i]==x) 51 break; 52 } 53 } 54 } 55 56 @Override 57 protected void onCreate(Bundle savedInstanceState) { 58 super.onCreate(savedInstanceState); 59 setContentView(R.layout.activity_main); 60 61 /*端末の画面の幅を取得*/ 62 WindowManager wm = (WindowManager)getSystemService(WINDOW_SERVICE); 63 Display disp = wm.getDefaultDisplay(); 64 Point size = new Point(); 65 disp.getSize(size); 66 int mainWidth = size.x; 67 68 /* ROW*COLテンキーの外枠のインスタンス*/ 69 TableLayout tenKey = (TableLayout) findViewById(R.id.ten_key); 70 for(int numCol=0;numCol<COL;numCol++){ 71 /* テンキーの行部分のインスタンス*/ 72 TableRow tableRow = new TableRow(this); 73 for(int numRow=1;numRow<ROW+1;numRow++){ 74 /* テンキーの要素のインスタンスの生成と番号付け */ 75 TextView tenKeyTextView = (TextView) getLayoutInflater().inflate(R.layout.ten_key_button,null); 76 tenKeyTextView.setText(String.valueOf(numCol*COL+numRow)); 77 78 /* テンキー要素にIDを付与 */ 79 viewId[numCol*COL+numRow] = tenKeyTextView.generateViewId(); 80 tenKeyTextView.setId(viewId[numCol*COL+numRow]); 81 82 /* 画面幅よりテンキーの要素ごとの大きさを設定 */ 83 tenKeyTextView.setWidth((int)((float)mainWidth/(float)(COL+0.5))); 84 tenKeyTextView.setHeight((int)((float)mainWidth/(float)(ROW+0.5))); 85 tenKeyTextView.setGravity(Gravity.CENTER); 86 87 /* テンキーの要素を行部分に入れる*/ 88 tableRow.addView(tenKeyTextView); 89 } 90 /* テンキーの行部分をテンキーの枠に入れる */ 91 tenKey.addView(tableRow); 92 } 93 } 94 95 @Override 96 public boolean onTouchEvent(MotionEvent event) { 97 98 for(int numCol=0;numCol<COL;numCol++) { 99 for(int numRow = 1; numRow < ROW + 1; numRow++) { 100 switch (event.getAction()) { 101 case MotionEvent.ACTION_DOWN: { 102 103 if(inViewBounds(findViewById(viewId[numCol*COL+numRow]), (int)event.getX(), (int)event.getY())){ 104 105 //今タッチした所 106 fromCol = numCol+1; 107 fromRow = numRow+0; 108 fromId =viewId[numCol*COL+numRow]; 109// Log.d("fromId", String.valueOf(fromId)); 110 } 111 112 } 113 case MotionEvent.ACTION_MOVE:{ 114 115 View fromView; 116 View toView; 117 118 if(inViewBounds(findViewById(viewId[numCol*COL+numRow]), (int)event.getX(), (int)event.getY())){ 119 120 toCol = numCol+1; 121 toRow = numRow+0; 122 toId = viewId[numCol*COL+numRow]; 123// Log.d("toId", String.valueOf(viewId[numCol*COL+numRow])); 124 125 fromView = findViewById(fromId); 126 toView = findViewById(toId); 127 128 //隣のマス目にまたいだら入れ替え処理 129 if(fromId != toId){ 130 131 } 132 133 } 134 } 135 } 136 } 137 } 138 139 //各フィールド変数を更新 140// fromRow = // //; 141// fromCol = // //; 142// fromId = // //; 143// 144 return true; 145 } 146 147 /* view内に(x,y)が存在するか */ 148 private boolean inViewBounds(final View view, int x, int y){ 149 Rect outRect = new Rect(); 150 view.getDrawingRect(outRect); 151 int[] location = new int[2]; 152 view.getLocationOnScreen(location); 153 outRect.offset(location[0], location[1]); 154 //Log.d("TouchEvsyent", "X:" + location[0] + ",Y:" + location[0]); 155 return outRect.contains(x, y); 156 } 157 158 private void randOnVib(){ 159 boolean duplicate=false; 160 Random rnd = new Random(); 161 for(int i=0;i<ON_VIB_NUM;i++) { 162 while(true) { 163 onVib[i] = rnd.nextInt(COL * ROW) + 1; 164 for (int j=0;j<i;j++) { 165 if (onVib[i] == onVib[j]) { 166 duplicate = true; 167 } 168 } 169 if (!duplicate) { 170 break; 171 } 172 } 173 } 174 } 175}

java

1<?xml version="1.0" encoding="utf-8"?> 2<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:paddingBottom="@dimen/activity_vertical_margin" 7 android:paddingLeft="@dimen/activity_horizontal_margin" 8 android:paddingRight="@dimen/activity_horizontal_margin" 9 android:paddingTop="@dimen/activity_vertical_margin" 10 android:id="@+id/main" 11 tools:context="com.example.admin.a0116myapplication.MainActivity"> 12 13 <TextView 14 android:id="@+id/textview" 15 android:layout_width="match_parent" 16 android:layout_height="wrap_content" 17 android:text="start"/> 18 19 <Button 20 android:id="@+id/vibAnsButton" 21 android:layout_width="match_parent" 22 android:layout_height="wrap_content" 23 android:text="ok" 24 android:layout_below="@+id/text" 25 android:layout_alignParentStart="true" /> 26 27 <TableLayout 28 android:layout_width="match_parent" 29 android:layout_height="wrap_content" 30 android:layout_below="@id/vibAnsButton" 31 android:id="@+id/ten_key"> 32 33 34 </TableLayout> 35</RelativeLayout> 36

java

1<?xml version="1.0" encoding="utf-8"?> 2<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="wrap_content" 5 > 6</TableLayout> 7

java

1<?xml version="1.0" encoding="utf-8"?> 2<TextView xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="wrap_content" 5 android:padding="0dp" 6 > 7 8</TextView>

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

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

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

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

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

yona

2017/01/17 06:12

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

2017/01/17 06:46

ご指摘ありがとうございます。一番上からMainactivity.java、activity_main.xml、ten_key.xml、ten_key_button.xmlです。アドバイス頂けたら幸いです。よろしくお願い致します。
guest

回答1

0

ベストアンサー

・最後にタッチしたViewの列番号と行番号を保持するフィールド変数を追加する。
・最後にタッチしたViewに書いてある番号を保持するフィールド変数を追加する。
・onTouchEventで今タッチしている列番号と行番号と最後にタッチした列番号と行番号を比較し、異なる場合は今タッチしているViewに最後にタッチしたViewの番号を入れ替え処理を行う。
・onTouchEventの最後に各フィールド変数を更新する。

投稿2017/01/17 08:40

yona

総合スコア18155

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

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

yuka3846

2017/01/17 09:15

回答ありがとうございます!! 行き詰っていたので本当にありがたいです!! 明日yona様の回答を元に再度挑戦してみます! また何かありましたら質問させてくださいm(._.)m
yuka3846

2017/01/19 06:35

@Override public boolean onTouchEvent(MotionEvent event) { for(int numCol=0;numCol<COL;numCol++) { for(int numRow = 1; numRow < ROW + 1; numRow++) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { //最後にタッチしたViewの列番号と行番号を保持 int fromRow = // //; int fromCol = // //; int fromId = viewId[numCol*COL+numRow]; } case MotionEvent.ACTION_MOVE:{ //最後にタッチしたViewに書いてある番号を保持するフィールド変数を追加する int toRow = // //; int toCol = // //; int toId = inViewBounds(findViewById(viewId[numCol*COL+numRow]), (int)event.getX(), (int)event.getY()) if(fromRow != toRow || fromCol != toCol){ //入れ替え処理 } } } //Log.d("TouchEvent", "X:" + event.getX() + ",Y:" + event.getY()); /* タッチしている場所がテンキーの要素の中にあるか*/ if(inViewBounds(findViewById(viewId[numCol*COL+numRow]), (int)event.getX(), (int)event.getY())){ }else{ } } } return true; } onTouchEventをいじってみましたが、ここから先に進めません、、 switch文を使ってみましたが、入れ替え処理や変数の保持の仕方などどうすればよいのでしょうか?? 手取り足取り聞いてしまい申し訳ありません、、来週の半ばまでに完成させなければならないのでご協力をお願いいたします。
yona

2017/01/19 06:55

フィールド変数の意味がわかりますか?
yuka3846

2017/01/19 07:18

すみません、わからないです。
yona

2017/01/19 07:46

調べましたか? 調べてないのに質問するのは良くないですよ。
yuka3846

2017/01/24 03:51

返信が遅くなり申し訳ありません。  すみません、最初に頂いた流れの部分でフィールド変数に気づかずに普通にただ変数として勘違いしていました。 調べてみたらクラスのメソッド外に宣言するとありました。なので私なりにメソッドの外に変数を設定してみました。 合っていますでしょうか??
yona

2017/01/24 06:56

あっています。初期値はhoge=-1とかにしとくといいですよ。
yuka3846

2017/01/24 07:05

コメントありがとうございます。 すみません、hogeを調べたら特に意味のない適当な名前の代表例と出ましたが、 //最後にタッチしたViewの列番号と行番号を保持 private int fromRow = -1; private int fromCol = -1; private int fromId = -1; //現在タッチしたViewに書いてある番号を保持 private int toRow = -1; private int toCol = -1; private int toId = -1; こういうことでしょうか??
yona

2017/01/24 07:19

その通りです。
yuka3846

2017/01/24 07:33

コメントありがとうございます。 わかりました。 ACTION_DOWNのタッチしたマス目の情報を自分なりに考えてみたのですがどうでしょうか?? また、ACTION_MOVEでタッチしながらドラッグして隣のマス目にまたいだらという部分はどうすればよいのでしょうか??m(__)m @Override public boolean onTouchEvent(MotionEvent event) { for(int numCol=0;numCol<COL;numCol++) { for(int numRow = 1; numRow < ROW + 1; numRow++) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { if(inViewBounds(findViewById(viewId[numCol*COL+numRow]), (int)event.getX(), (int)event.getY())){ //タッチした所 fromCol = COL+1; fromRow = numRow; fromId = viewId[numCol*COL+numRow]; } } case MotionEvent.ACTION_MOVE:{ if(fromRow != toRow || fromCol != toCol){ //隣のマス目にまたいだら入れ替え処理 } } } } } //各フィールド変数を更新 fromRow = // //; fromCol = // //; fromId = // //; return true; }
yona

2017/01/24 07:43

跨いだらテキストの入れ替えを行うんじゃないんですか?
yuka3846

2017/01/24 07:50

そうです。入れ替えをしたいのですがACTION_DOWNとACTION_MOVEの部分にどう記述すればよいのか分からない状態です、、
yona

2017/01/24 07:54

やることはViewの特定ですよね?アクションダウンのときのViewとアクションムーブのときのViewを特定すればできますよね。
yuka3846

2017/01/24 08:05

そのviewの特定に苦戦しています、、色んなワードで調べてみましたが座標の特定なら調べるとたくさん出てきましたがx座標=列というわけでもないので違うと思いましたし、プログラミングに詳しい友人にも聞いてみましたが全く手が出ない状態です、、m(__)m
yona

2017/01/24 08:18

すぐにウェブで調べるのではなく自分で考えましょう。 保存しているfromColとfromRowには何が入っているんですか?
yuka3846

2017/01/24 08:21

すみません、今回がプログラミング初めてなので一文一文所見のものは調べて覚えてを繰り返しているので、、 初期段階では-1が入っているということですよね??
yona

2017/01/24 08:23

それは初期値の話です、アクションダウンで入れた値は何を表しているんですか?
yuka3846

2017/01/24 08:32

合っているかはわかりませんが、自分なりに押したマス目の行と列と番号をfromCol,fromRow,fromIdに入れたつもりです。
yona

2017/01/24 08:37

それがわかるならViewは特定できますよね。
yuka3846

2017/01/24 08:53

すみません、Viewの特定というイメージがよくつかめていないのですが @Override public boolean onTouchEvent(MotionEvent event) { for(int numCol=0;numCol<COL;numCol++) { for(int numRow = 1; numRow < ROW + 1; numRow++) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { if(inViewBounds(findViewById(viewId[numCol*COL+numRow]), (int)event.getX(), (int)event.getY())){ //今タッチした所 fromCol = numCol+1; fromRow = numRow; fromId = viewId[numCol*COL+numRow]; } } case MotionEvent.ACTION_MOVE:{ if(inViewBounds(findViewById(viewId[numCol*COL+numRow]), (int)event.getX(), (int)event.getY())){ //今タッチした所 toCol = numCol+1; toRow = numRow; toId = viewId[numCol*COL+numRow]; //隣のマス目にまたいだら入れ替え処理 if(fromId != toId){ //行 int x = fromCol; fromCol = toCol; toCol = x; //列 int y = fromRow; fromRow = toRow; toRow = y; //番号 int z = fromId; fromId = toId; toId = z; } } } } } } //各フィールド変数を更新 // fromRow = // //; // fromCol = // //; // fromId = // //; // return true; } こういう事でしょうか?
yona

2017/01/24 13:49 編集

どういうことでしょうか。 落ち着いてやりたいことを整理してください。とりあえずでコードを変更して見せられてもわかりません。 あなたがやりたいことはアクションダウンの起きたViewとアクションムーブの起きたViewで中の文字を入れ替えるということですよね? だからそれぞれのViewを特定しないといけないと回答しているんです。とりあえず取得しているidでfindViewByIdを行い、テキストをログ出力してみてください。
yuka3846

2017/01/25 00:04

コメントありがとうございます。 すみません、初心者なのでviewの特定と言われてもそこが分からないので自分なりに考えてやってみた結果になってしまいました、、 findviewbyidですね。アドバイスありがとうございます。 今日は外出してしまうので明日どういうものか調べながらやってみます。
yuka3846

2017/01/26 07:57

一応log.dで記述して、デバッグしてみたら中身のnumCol*COL+numRowにはタッチした番号が入っていることが確認できました。 findViewByIdの文についてはまだ理解が足りず使えていないのですが(:_;) case MotionEvent.ACTION_DOWN: { if(inViewBounds(findViewById(viewId[numCol*COL+numRow]), (int)event.getX(), (int)event.getY())){ //今タッチした所 fromCol = numCol+1; fromRow = numRow; Log.d("fromId", String.valueOf(numCol*COL+numRow)); //fromId = (TextView) findViewById(fromId); } }
yuka3846

2017/01/26 08:09

ちなみにConsoleという所を見てみたらタッチしてからドラッグしているとfromId,toIdには触っているマス目がちゃんと記録されているようでした。
yona

2017/01/26 08:13

あとは数字を入れ替えたら終わりですね。
yuka3846

2017/01/26 08:52

様々なアドバイス本当にありがとうございます。 javaの部分修正してみましたが、Consoleで確認したfindViewByIdにはnullとなってしまいました、、 また、またいだ入れ替え処理の部分には一切数字が入っていないようでテキストを入れ替えることができませんでした、、(:_;)
yona

2017/01/26 08:59

ではあなたが言っているfromIdは誤りです。fromIdはViewのidじゃないんですか?
yuka3846

2017/01/26 09:15

アドバイスいただいた通りLog.d("fromId", String.valueOf(numCol*COL+numRow));このようにして触ったnumCol*COL+numRowをログでfromIdとして出力しました。 ちなみにこのnumCol*COL+numRowにはタッチした番号は入っていることが確認済みです。 恐らくfromid = findViewById(fromId);こちらの文が間違っているのかと、、
yona

2017/01/26 09:18

Viewのidの意味がわかりますか?
yuka3846

2017/01/26 09:23

タッチした番号それぞれのリソースidということですよね??(:_;)
yona

2017/01/26 09:50

はい。 findViewByIdはそのidからViewを取得するためのメソッドです。これがnullを返すということはidが存在しないからです。 なので、あなたがfromIdに入れたという値は間違っています。
yuka3846

2017/01/26 09:54

そうするとLog.dが間違っているということですか??
yona

2017/01/26 10:15

あなたが間違っているんですよ。 名前からしてviewId[]はviewIdを保持している配列じゃないんですか? Log.dに出力しているのはこの配列の要素番号じゃないんですか。
yuka3846

2017/01/27 02:38

コメントありがとうございます。 私が間違っているのは重々承知です。 はい。そのつもりで出力したのですが要素番号を出力したのが間違いという事ですか??
yona

2017/01/27 03:10

ログ出力は値を確認するために行なっています。そのためログ出力処理自体に正しい誤りはなく、ログ出力で出力された値が誤っていると言っています。 あなたが書いたコードは下記のようにするんじゃないんですか? findViewById(viewId[fromId])
yuka3846

2017/01/27 04:00

Log.d("fromId", String.valueOf(viewId[numCol*COL+numRow])); fromid = findViewById(viewId[fromId]); このようにしてみましたが、Consoleでjava.lang.IndexOutOfBoundsException : Invalid array index: -1、fromId=-1,fromid=nullと出てしまいました。 ちなみにfromidはView型で宣言しています。
yona

2017/01/27 04:11

なぜView型のfromidとはなんですか、またなぜそんなわかりにくい名前を付けたんですか。 なぜint型のfromIdを使用していないんですか。 私のコメントでそのようなことをしたならどのコメントでそうしようと思ったんですか?
yuka3846

2017/01/27 04:23

fromidをint型にしたらfromid = findViewById(viewId[fromId]);の部分がエラーになってしまったのでView型にしてみました、、(:_;)
yona

2017/01/27 05:19

適当に変えてできませんでした、では私には回答できません。
yuka3846

2017/01/27 05:22

yona様もわからないということですか??
yuka3846

2017/01/27 05:24

すみません、私が適当に変えてできなかったということですね。失礼いたしました。
yona

2017/01/27 05:40

はい、あなたがあなたの考えでコメントとは異なることをして、そのことをコメントに書かないなら私には回答できません。 あとから「ちなみに…」と言われても不快です。 それはそれとして下記のことをやってください。疑問があるなら先に質問してください。 ・View型のfromidを削除してください。 ・アクションダウン時にfromIdにviewId[numCol*COL+numRow]を入れてください。 ・アクションムーブ時にtoIdにviewId[numCol*COL+numRow]を入れてください。 ・アクションムーブ時にローカル変数View fromViewを宣言してください。 ・アクションムーブ時にローカル変数View toViewを宣言してください、 ・fromView=findViewById(fromId)とtoView=findViewById(toId)をしてください。
yuka3846

2017/01/27 06:11

不快な気分にさせてしまい申し訳ありませんでした。 コメントいただいた部分トップのjavaコードに追加させていただきました。 質問としては ・アクションダウン時にfromIdにviewId[numCol*COL+numRow]を入れてください。 ・アクションムーブ時にtoIdにviewId[numCol*COL+numRow]を入れてください。 こちらの二つについて以前アドバイスを頂いたLogの出力とfindViewBuIdどう組み合わせればよいのでしょうか??
yona

2017/01/27 06:30

logの出力は確認のためだと言いましたよね?log出力の意味を理解していない以上考えても無駄なので忘れてください。 で、値は入れましたか?
yuka3846

2017/01/27 06:40

すみません、ログの意味を勘違いしていました。 if(inViewBounds(findViewById(viewId[numCol*COL+numRow]), (int)event.getX(), (int)event.getY())){ //今タッチした所 fromCol = numCol+1; fromRow = numRow+0; //Log.d("fromId", String.valueOf(viewId[numCol*COL+numRow])); fromId = viewId[numCol*COL+numRow]; } fromIdとtoIdの文も追加してみましたがやはりviewId[numCol*COL+numRow]にはタッチした番号が入るのですがfromIdには-1と出てしまいます、、(:_;)
yona

2017/01/27 06:53

viewIdに値を入れるんじゃないですよ、取り出すんですよ。 コメントにあるif文の式の中でやってるじゃないですか。 それでfromIdが-1になるならviewIdが間違っていることになります。
yuka3846

2017/01/27 07:00

すみません、言い方を間違えました。 Variables?という所でデバッグしてある番号をタッチした時にviewId[numCol*COL+numRow]にはタッチした番号がちゃんと入っている事が確認できたのですが、 fromId = viewId[numCol*COL+numRow]; この文でそのタッチしたviewId[numCol*COL+numRow]の値を取り出してfromIdに入れることができていないということです。
yona

2017/01/27 07:25

タッチしたとはなんですか?独自の単語を作らないでください。
yuka3846

2017/01/27 07:32

実際に実機で動かしたときに、ある番号を押した時のviewIdやfromIdに押した番号がちゃんと入っているか確認したということです。
yona

2017/01/27 08:51

下記の値がそれぞれどうなっているか具体的な値を書いてください。 ・fromId ・numCol*COL+numRow ・viewId[numCol*COL+numRow]
yuka3846

2017/01/27 09:10

例えば12を押すと fromId=-1 numCol=2,COL=4,numRow=4, viewIdに関しては”辞”というマークがついた方はviewId[numCol*COL+numRow]=12、 1,2,3という行のようなマークがついた方はviewId={int[17]@20335}と出ました。
yona

2017/01/27 10:34 編集

その状態でfromId = viewId[numCol*COL+numRow]をしているんですよね?それなのに-1になるんですか?
yuka3846

2017/01/28 04:42

コメント遅くなり申し訳ありません。 その通りです(;_;)
yuka3846

2017/01/30 02:24

昨日一昨日で色々考えてみて、 case MotionEvent.ACTION_DOWN: { if(inViewBounds(findViewById(viewId[numCol*COL+numRow]), (int)event.getX(), (int)event.getY())){ //今タッチした所 fromCol = numCol+1; fromRow = numRow+0; int Id =numCol*COL+numRow; fromId = Id; Log.d("fromId", String.valueOf(fromId)); } } このように一回Idという変数にnumCol*COL+numRowを入れてそれをfromIdに入れたらConsoleした時にfromIdに数字が入るようになりました。 ただその代わりに上部のfromCol=numCol+1;,fromRow=numRow+0;は-1が入るようになってしまいましたが(:_;) これではだめでしょうか??
yona

2017/01/30 02:49

何が起きているかわからないのでダメかどうかわかりません。 多分、値の確認方法が怪しいです。
yuka3846

2017/01/30 03:08

すみません!!ブレークポイントのつけ方が悪くてうまく値が確認できていなかったことにたった今気づきました。 改めて確認した所、 fromCol = numCol+1; fromRow = numRow+0; fromId =viewId[numCol*COL+numRow]; こちらにはしっかりと値が入っていることが確認できました!!
yona

2017/01/30 03:42

fromIdでfindViewByIdを行い、TextView#getTextを行なって値が正しいかを確認してください。
yuka3846

2017/01/30 04:06

TextView textView = (TextView) findViewById(R.id.textview); int Id = findViewById(fromId); textView.getText(Id); このようにしたところ、Incompatible types Required:int Found:android.view.Viewと出てしまいました。 恐らくint型のIdにView型が入っているということですよね??
yuka3846

2017/01/30 04:31

TextView textView = (TextView) findViewById(R.id.textview); View Id = findViewById(fromId); textView.getText(Id); fromIdとIdの型が合わないということでIdをViewにしましたが今度は三行目のgetText(Id)にエラーが出てしまいました。
yona

2017/01/30 05:57

自分でまったく調べずに行き当たりばったりで作っていませんか?
yuka3846

2017/01/30 06:14

私なりに調べて考えたつもりです、、 view型のものをgetTextできないこともわかりましたが、fromIdをtextViewで表示する記述は文としてはこうではないのかなと考えた結果です(:_;)
yona

2017/01/30 06:23

メソッドの使い方に個人の解釈は必要ありません。リファレンスの使い方を理解して使ってください。
yuka3846

2017/01/30 06:26

これは個人の解釈だったのでしょうか? getText()の使い方や例を見ながらやってみたのですが、、
yona

2017/01/30 06:32

そのサイトを載せてください。
yona

2017/01/30 06:51

サイトのやり方は正しいです。あなたのやり方はサイトの通りにやっていないので正しくないです。 どこのgetTextに引数があるんですか?
yuka3846

2017/01/30 06:57

すみません。 調べたらgetText()の前に得たい値をつけるのですよね?? そうすると TextView textView = (TextView) findViewById(R.id.textview); View Id = findViewById(fromId); Id.getText(); このようになるのでしょうか?
yuka3846

2017/01/31 00:35

続けて申し訳ありません。 まだ解決できてないところで次の質問をするのは申し訳ない事は重々承知の上です。 1つ気になったのですが、consoleをした際にACTION_DOWNは検知されているのですがACTION_MOVEが検知されません。 調べたところそれぞれcase motionevent.ACTION_DOWNなどの最後にbreakをつけて1番最後にreturn trueを返すと出ていたのでやってみましたが、そうすると実機で実行した時に最初指で触れたfromIDしか検知されません。 こちらについてはどうすればよいのでしょうか??
yuka3846

2017/01/31 01:31

言葉足らずですみません。consoleをした際はじめ指でどれか番号を押すとACTION_DOWNと表示が出て、LogでfromId,fromCol,fromRowがしっかりと表示されます。その後ろにtoId,toRow,toColもLogで表示はされるのですが指で隣のマスにドラッグした時にACTION_MOVEと出ないということです。
yuka3846

2017/01/31 01:32

toId,toRow,toColが出るということはACTION_MOVEの中はちゃんと動いているということだとは思いますが、のちのち入れ替えの際などに影響しないのかなと思い質問させていただきました。
yuka3846

2017/01/31 09:16

しばらくの間色々なアドバイスありがとうございました。 あの後色々と調べながら聞きながら取り組んだ結果無事に完成させることができました。 色々と失礼な質問や不快な気分にさせてしまったことについて申し訳なく思います。 本当にたくさんのアドバイスをありがとうございました。
yona

2017/01/31 09:35

力になれずごめんなさい。
yuka3846

2017/01/31 10:19

とんでもないです!!yona様からのアドバイスが無ければ手も足も出せない状態でした。本当に感謝しています。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問