Android プログラミング【 診断アプリ 】 ~ シンプル版 ~

診断アプリ 768

少々長い動画になります。
過去の動画をほぼご覧になって「理解済み」の方用の動画です。

専門用語 「 変数・配列・アクティビティ・インテント・クリック処理 」と言われて分からない方は参考程度にご覧ください。

プロジェクト、カンパニードメイン、パッケージネームを同じにするとコピペエラーが減ります。

Application name CheckApp
Company Domain test.com
Package name com.test.checkapp

診断アプリ_新規作成

* 注意 *
・画像をご自身で要するにはファイル名やファイルサイズ、拡張子に注意する必要があります。
・ファイル名は半角小文字の英数(a~z 0~9)とアンダーバー( _ )のみで、最初の1文字目は半角英字( a ~ z)のみです。
・慣れてない方はサンプル画像の使用をオススメします。

main
魔女
魔法少女
魔法剣士
剣士タイプ
パワータイプ

activity_main

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.test.checkapp.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="キャラ診断"
        android:textSize="60sp" />

    <Button
        android:onClick="onStart"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="スタート"
        android:textSize="40sp" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/main" />
</LinearLayout>

activity_play

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_play"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.test.checkapp.PlayActivity">

    <TextView
        android:id="@+id/tvCount"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:text="後5問" />

    <TextView
        android:gravity="center"
        android:id="@+id/tvQuestion"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="パワーで勝負"
        android:textSize="40sp" />

    <LinearLayout

        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true">

        <Button
            android:padding="10dp"
            android:onClick="onYes"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Yes"
            android:textSize="40sp" />

        <Button
            android:padding="10dp"
            android:onClick="onNo"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="No"
            android:textSize="40sp" />
    </LinearLayout>

</RelativeLayout>

activity_result

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_result"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.test.checkapp.ResultActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="あなたは"
        android:textSize="18sp" />

    <TextView
        android:id="@+id/tvResult"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="パワータイプ"
        android:textSize="40sp" />

    <TextView
        android:id="@+id/tvReText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="何も気にせずごり押ししましょう"
        android:textSize="18sp" />

    <ImageView
        android:id="@+id/ivReImg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/p4" />

</LinearLayout>

package com.test.checkapp;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    // 画面切り替え   /////////////////////////////////////
    public void onStart(View v){
        Intent intent = new Intent(this,PlayActivity.class);
        startActivity(intent);
    }
}

package com.test.checkapp;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;

public class PlayActivity extends AppCompatActivity {

    int count = 5;  // 問題数

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_play);
    }

    // Yesボタン   /////////////////////////////////////
    public void onYes(View v) {
        count--;
        if (count > 0) {
            ((TextView) findViewById(R.id.tvCount)).setText("後" + count + "問");
        } else {
            Intent intent = new Intent(this, ResultActivity.class);
            startActivity(intent);
            finish();
        }
    }


    // Noボタン   /////////////////////////////////////
    public void onNo(View v) {
        count--;
        if (count > 0) {
            ((TextView) findViewById(R.id.tvCount)).setText("後" + count + "問");
        } else {
            Intent intent = new Intent(this, ResultActivity.class);
            startActivity(intent);
            finish();
        }
    }
}

package com.test.checkapp;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;

import java.util.Random;

public class PlayActivity extends AppCompatActivity {

    // 問題データ    ////////////////////////
    String[] question = {
            "ガンガン行こうぜ!",
            "慎重に!!",
            "支援は大事だね",
            "元気があれば何でも出来る!",
    };

    int r = 0;  // 乱数の保管
    int count = 5;  // 問題数

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_play);

        // 出題   /////////////////////////////
        r = new Random().nextInt(question.length);
        ((TextView) findViewById(R.id.tvQuestion)).setText(question[r]);
    }

    // Yesボタン   /////////////////////////////////////
    public void onYes(View v) {
        count--;
        if (count > 0) {
            ((TextView) findViewById(R.id.tvCount)).setText("後" + count + "問");
            // 出題   /////////////////////////////
            r = new Random().nextInt(question.length);
            ((TextView) findViewById(R.id.tvQuestion)).setText(question[r]);
        } else {
            Intent intent = new Intent(this, ResultActivity.class);
            startActivity(intent);
            finish();
        }
    }


    // Noボタン   /////////////////////////////////////
    public void onNo(View v) {
        count--;
        if (count > 0) {
            ((TextView) findViewById(R.id.tvCount)).setText("後" + count + "問");
            // 出題   /////////////////////////////
            r = new Random().nextInt(question.length);
            ((TextView) findViewById(R.id.tvQuestion)).setText(question[r]);
        } else {
            Intent intent = new Intent(this, ResultActivity.class);
            startActivity(intent);
            finish();
        }
    }
}

スコアとタイプ

package com.test.checkapp;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;

import java.util.Random;

public class PlayActivity extends AppCompatActivity {

    // 問題データ    ////////////////////////
    String[] question = {
            "ガンガン行こうぜ!",
            "慎重に!!",
            "支援は大事だね",
            "元気があれば何でも出来る!",
    };

    // YES選択時のスコア(評価点)
    int[] yes = {1, -1, -1, 1};

    int r = 0;  // 乱数の保管
    int count = 5;  // 問題数
    int score = 0;   // スコアの合計(評価点)

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_play);

        // 出題   /////////////////////////////
        r = new Random().nextInt(question.length);
        ((TextView) findViewById(R.id.tvQuestion)).setText(question[r]);
    }

    // Yesボタン   /////////////////////////////////////
    public void onYes(View v) {
        count--;
        score += yes[r]; // スコアの加算
        if (count > 0) {
            ((TextView) findViewById(R.id.tvCount)).setText("後" + count + "問");
            // 出題   /////////////////////////////
            r = new Random().nextInt(question.length);
            ((TextView) findViewById(R.id.tvQuestion)).setText(question[r]);
        } else {
            Intent intent = new Intent(this, ResultActivity.class);
            intent.putExtra("score" , score);
            startActivity(intent);
            finish();
        }
    }


    // Noボタン   /////////////////////////////////////
    public void onNo(View v) {
        count--;
        score -= yes[r]; // スコアの減算
        if (count > 0) {
            ((TextView) findViewById(R.id.tvCount)).setText("後" + count + "問");
            // 出題   /////////////////////////////
            r = new Random().nextInt(question.length);
            ((TextView) findViewById(R.id.tvQuestion)).setText(question[r]);
        } else {
            Intent intent = new Intent(this, ResultActivity.class);
            intent.putExtra("score" , score);
            startActivity(intent);
            finish();
        }
    }
}

package com.test.checkapp;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;

public class ResultActivity extends AppCompatActivity {

    String[] result = {
            "魔女タイプ",
            "魔法少女",
            "魔法剣士",
            "剣士タイプ",
            "パワータイプ",
    };

    String[] reTest = {
            "とっても神秘的!!",
            "後方支援が得意です",
            "オールマイティ!!",
            "スタンダードに攻撃だ!",
            "何も気にせずごり押しだ!",
    };

    int[] reImg = {
            R.drawable.p0,
            R.drawable.p1,
            R.drawable.p2,
            R.drawable.p3,
            R.drawable.p4,
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_result);

        // インテントからスコアを取得    /////////////////////
        int score = getIntent().getIntExtra("score" , 0);
        if( score < 0) score = 0;
        if( score >= result.length) score = result.length -1;

        // テキストと画像をセット  //////////////////////////
        ((TextView)findViewById(R.id.tvResult)).setText(result[score]);
        ((TextView)findViewById(R.id.tvReText)).setText(reTest[score]);
        ((ImageView)findViewById(R.id.ivReImg)).setImageResource(reImg[score]);
    }
}