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

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

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

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

Java

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

Android

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

Android Studio

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

Android Emulator

Android EmulatorはアンドロイドのOSで起動しているアンドロイドのデバイスの機能をシミュレートするソフトウェアです。Emulatorは開発者に複数の違う設定を持ったデバイスを必要とすることなくアプリケーションを開発しテストすることが可能になります。

Q&A

0回答

1024閲覧

パズル認証の論文を実装「指定した場所に指定したViewを入れて認証を行うことをしたい」

daigakusei2

総合スコア0

XML

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

Java

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

Android

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

Android Studio

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

Android Emulator

Android EmulatorはアンドロイドのOSで起動しているアンドロイドのデバイスの機能をシミュレートするソフトウェアです。Emulatorは開発者に複数の違う設定を持ったデバイスを必要とすることなくアプリケーションを開発しテストすることが可能になります。

0グッド

1クリップ

投稿2020/10/21 09:49

前提・実現したいこと

androidstudioを使いJavaとxmlで書いています。
4×4のマスに16個のパネルがあります。
パズル認証の論文をデモで実装したいです。
目標
4つの上の場所(後から変更でき自分の好きなところに変えれる)に4つの自分の指定したImageview(例1,2,3,4)を移動させてOKを押したら次のスライドに行けるようなプログラムを書きたい。
(指定した場所以外でOKを押しても何もない)
イメージ説明

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

4つの場所の指定と4つのimageviewがあっていれば次のスライドに行く方法がわからないので教えてほしいです。

該当のソースコードMainActivity

import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Build;
import android.os.Bundle;
import android.view.DragEvent;
import android.view.View;
import android.widget.Button;
import android.widget.GridLayout;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.Random;

import static android.widget.Toast.LENGTH_SHORT;

public class MainActivity extends AppCompatActivity implements View.OnLongClickListener, View.OnDragListener {
/**
* ドラッグされたView
/
private View mDragView;
/
*
* レイアウト
*/
private GridLayout mParent;

final int panelId[] = {R.id.panel1, R.id.panel2, R.id.panel3, R.id.panel4, R.id.panel5, R.id.panel6, R.id.panel7, R.id.panel8, R.id.panel9, R.id.panel10, R.id.panel11, R.id.panel12, R.id.panel13, R.id.panel14, R.id.panel15,R.id.panel16 }; // パネル1~9のID int panelToDrawable[] = new int[16]; ImageView panelImageView[] = new ImageView[16]; final int imageDrawableId[] = {R.drawable.image1, R.drawable.image2, R.drawable.image3, R.drawable.image4, R.drawable.image5, R.drawable.image6, R.drawable.image7, R.drawable.image8, R.drawable.image9, R.drawable.image10, R.drawable.image11, R.drawable.image12, R.drawable.image13, R.drawable.image14, R.drawable.image15, R.drawable.image16 }; boolean isClicked = false; /** * アプリ起動時の最初に呼ばれるイベント * * @param savedInstanceState */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); for (int i = 0; i < 16; i++) { panelImageView[i] = (ImageView) this.findViewById(panelId[i]); } shuffle(); // シャッフルする Button buttonsyahhuru = findViewById(R.id.buttonsyahhuru); buttonsyahhuru.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { shuffle(); } }); Button buttonok = findViewById(R.id.buttonok); buttonok.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); // 各Viewに、ボタン長押し・ドラッグのイベントを設定していく mParent = findViewById(R.id.grid_layout); for (int i = 0; i < mParent.getChildCount(); i++) { View v = mParent.getChildAt(i); v.setOnLongClickListener(this); v.setOnDragListener(this); } } /** * Viewを長押ししたとき通知されるイベント * * @param v 対象のView * @return イベント有効有無 */ @RequiresApi(api = Build.VERSION_CODES.N) @Override public boolean onLongClick(View v) { // 長押ししているViewをドラッグ状態にする。 v.startDragAndDrop(null, new View.DragShadowBuilder(v), v, 0); mDragView = v; // 図(b, c)から、ドラッグ中のViewは見えなくなる必要があるので、透過値調整して消す。 // Visibilityで消すこともできるが、ドラッグ終了時のアニメーションが入るので、透過値で非表示を表現 mDragView.setAlpha(0); return true; } /** * ドラッグされたとき通知されるイベント * * @param v 通知を受信したView * @param event イベント(使用するのは、ドラッグ終了、ドラッグしたまま他のViewの上にカーソルが合う) * @return イベント有効有無(必ずTrueにする) */ @RequiresApi(api = Build.VERSION_CODES.P) @Override public boolean onDrag(final View v, DragEvent event) { switch (event.getAction()) { // 手を放し、ドラッグが終了した時の処理。ドラッグしているViewを表示させる。 case DragEvent.ACTION_DRAG_ENDED: getMainExecutor().execute(new Runnable() { @Override public void run() { mDragView.setAlpha(1); } }); break; // ドラッグ中他のViewの上に乗る時の処理。Viewの位置を入れ替える case DragEvent.ACTION_DRAG_LOCATION: getMainExecutor().execute(new Runnable() { @Override public void run() { MainActivity.this.swap(v, mDragView); } }); break; } return true; } /** * Viewの位置を入れ替える * * @param v1 入れ替え対象1 * @param v2 入れ替え対象2 */ private void swap(View v1, View v2) { // 同じViewなら入れ替える必要なし if (v1 == v2) return; // レイアウトパラメータを抜き出して、入れ替えを行う GridLayout.LayoutParams p1 = (GridLayout.LayoutParams) v1.getLayoutParams(); GridLayout.LayoutParams p2 = (GridLayout.LayoutParams) v2.getLayoutParams(); mParent.removeView(v1); mParent.removeView(v2); mParent.addView(v1, p2); mParent.addView(v2, p1); } public void shuffleProc(View v) { shuffle(); } private void shuffle() { for (int i = 0; i < 16; i++) { panelToDrawable[i] = 0; // パネルとdrawableの対応表を初期化(空にする) } // パネルをランダムに表示する Random r = new Random(); for (int i = 0; i < 16; i++) { int temp; do { temp = r.nextInt(16); // 0~15の乱数 } while (panelToDrawable[temp] != 0); // 空きでない間、乱数を作り続ける panelToDrawable[temp] = i; // 空きパネルに入れる } for (int i = 0; i < 16; i++) { // パネルを表示する panelImageView[i].setImageResource(imageDrawableId[panelToDrawable[i]]); } } private void swapPanel(){//指定した4つの場所にに指定したパネルをはめる処理

\ここのなかの処理をどうしていいかわかりません↓このような処理をしたいと考えています。

if(panel[R.id.panel1]==panelImageview[1]){

}
}

}

試したこと

ネットで指定した場所に行ったら次のスライドに行くようなコードを調べたがわからなかった

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問